当前位置: 代码网 > it编程>编程语言>Asp.net > 【C#】如何使用C#与SQL Server数据库进行交互

【C#】如何使用C#与SQL Server数据库进行交互

2024年08月06日 Asp.net 我要评论
(1)在工具箱中拖出dataGridView控件和botton控件(可以改名是其功能明确)(3)创建成功后会有源数据库以及其镜像(我们后续操作都在镜像完成就好)(5)在设计界面再拖入botton以及一个textbox(用于根据姓名查询)()(3)双击双击botton2,进入代码编写(插入数据)(4)双击双击botton3,进入代码编写(查询数据)(2)双击botton1,进入代码编写(检查链接)(4)新建数据库XSCJDB(学生成绩数据库)(6)编写botton5代码(按名字查询)

一.创建数据库

        用vs 创建数据库的步骤如下:

        (1)启动vs ,打开“服务器资源管理器”窗口,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新sql server 数据库】选项,弹出“创建新的sql server数据库”对话框。

        (2)对应项目,系统添加数据库连接。(要是电脑没有sql server,可以选中视图中的sql server资源管理器创建数据库)

        (3)创建成功后会有源数据库以及其镜像(我们后续操作都在镜像完成就好)        

        (4)新建数据库xscjdb(学生成绩数据库)

        

        (5)选中该数据库并创建新表student。

        (6)表中插入属性

        (7)可右键选中表查看表中数据

二.使用控件实现连接数据库并对其操作

       (1)在工具箱中拖出datagridview控件和botton控件(可以改名是其功能明确)

        (2)双击botton1,进入代码编写(检查链接)

// 处理button1的点击事件,测试数据库连接
private void button1_click(object sender, eventargs e)
{
    // 数据库连接字符串
    string strcom = @"your string";
    sqlconnection sqlcon;

    // 使用using语句自动处理数据库连接的释放
    using (sqlcon = new sqlconnection(strcom))
    {
        // 打开数据库连接
        sqlcon.open();
        // 显示数据库连接状态
        messagebox.show("数据库连接状态" + sqlcon.state.tostring(), "第一个对话框");
    }
    // 显示数据库连接状态
    messagebox.show("数据库连接状态" + sqlcon.state.tostring(), "第二个对话框");
}

        值得注意的是:数据库链接字符串,先点击xsvjdb

右边的属性列就会有连接字符串

只需选中至字符串出现第一个true;便可正常连接。

        (3)双击双击botton2,进入代码编写(插入数据)

 // 处理button2的点击事件,插入数据到数据库
 private void button2_click(object sender, eventargs e)
 {
     // 数据库连接字符串
     string strcom = @"your string";
     sqlconnection conn = null;

     try
     {
         // 初始化并打开数据库连接
         conn = new sqlconnection(strcom);
         conn.open();

         // 创建并配置sqlcommand对象
         sqlcommand mycmm = new sqlcommand
         {
             connection = conn,
             commandtype = commandtype.text,
             commandtext = @"insert into student(id,name,major,grade,tel) values(@id,@name,@major,@grade,@tel)"
         };

         // 添加参数并赋值
         mycmm.parameters.add(new sqlparameter("@id", 2022003));
         mycmm.parameters.add(new sqlparameter("@name", "王五"));
         mycmm.parameters.add(new sqlparameter("@major", "cs"));
         mycmm.parameters.add(new sqlparameter("@grade", "40"));
         mycmm.parameters.add(new sqlparameter("@tel", "1837334"));

         // 执行插入命令
         int returnvalue = mycmm.executenonquery();

         // 检查插入是否成功
         if (returnvalue != -1)
         {
             messagebox.show("数据插入成功");
         }
     }
     catch (exception ex)
     {
         // 处理异常
         if (conn != null)
         {
             messagebox.show("数据插入失败" + ex.message);
         }
     }
 }

        (4)双击双击botton3,进入代码编写(查询数据)

// 处理button3的点击事件,从数据库中查询并显示所有数据
private void button3_click(object sender, eventargs e)
{
    // 数据库连接字符串
    string strcom = @"your string";
    sqlconnection conn = null;

    try
    {
        // 初始化并打开数据库连接
        conn = new sqlconnection(strcom);
        conn.open();

        // 创建并配置sqlcommand对象
        sqlcommand mycmm = new sqlcommand
        {
            connection = conn,
            commandtype = commandtype.text,
            commandtext = @"select * from student"
        };

        // 使用sqldataadapter填充dataset
        sqldataadapter sda = new sqldataadapter(mycmm);
        dataset ds = new dataset();
        sda.fill(ds, "studentlist");

        // 显示查询结果到datagridview
        datagridview2.datasource = ds.tables["studentlist"].defaultview;

        // 关闭数据库连接
        conn.close();
    }
    catch (exception ex)
    {
        // 处理异常
        messagebox.show(ex.message);
        if (conn != null)
        {
            conn.close();
        }
    }
}

        (5)在设计界面再拖入botton以及一个textbox(用于根据姓名查询)()

        (6)编写botton4代码(按名字查询)

// 处理button4的点击事件,根据名字查询数据
private void button4_click(object sender, eventargs e)
{
    // 数据库连接字符串
    string strcon = @"your string";
    sqlconnection myconnection = new sqlconnection(strcon);

    try
    {
        // 打开数据库连接
        myconnection.open();

        // 创建并配置sqlcommand对象
        sqlcommand mycommand = new sqlcommand
        {
            connection = myconnection,
            commandtype = commandtype.text,
            commandtext = @"select * from student where name =@name"
        };

        // 添加参数并赋值
        mycommand.parameters.add(new sqlparameter("@name", textbox1.text));

        // 执行查询命令并检查结果
        int res = convert.toint32(mycommand.executescalar());
        if (res == 0)
        {
            throw new exception("查无此人");
        }

        // 使用sqldataadapter填充dataset
        sqldataadapter sda = new sqldataadapter(mycommand);
        dataset ds = new dataset();
        sda.fill(ds, "xr");

        // 显示查询结果到datagridview
        datagridview2.datasource = ds.tables["xr"].defaultview;

        // 关闭数据库连接
        myconnection.close();
    }
    catch (exception ex)
    {
        // 处理异常
        messagebox.show(ex.tostring());
        if (myconnection != null)
        {
            myconnection.close();
        }
    }
}

        (7)对于datagritview的代码

// 保存编辑单元格的原始值
object celltempvalue = null;

// 单元格开始编辑事件
private void datagridview2_cellbeginedit(object sender, datagridviewcellcanceleventargs e)
{
    // 保存单元格的原始值
    celltempvalue = this.datagridview2.rows[e.rowindex].cells[e.columnindex].value;
}

// 单元格结束编辑事件
private void datagridview2_cellendedit(object sender, datagridviewcelleventargs e)
{
    // 如果单元格值没有改变,返回
    if (object.equals(celltempvalue, this.datagridview2.rows[e.rowindex].cells[e.columnindex].value))
    {
        return;
    }

    // 弹出确认修改对话框
    if (messagebox.show("是否确定修改,并更新到数据库", "提示", messageboxbuttons.okcancel, messageboxicon.question) != dialogresult.ok)
    {
        // 如果取消修改,恢复原值
        this.datagridview2.rows[e.rowindex].cells[e.columnindex].value = celltempvalue;
        return;
    }

    // 数据库连接字符串
    string strcom = @"your string";
    sqlconnection myconnection = new sqlconnection(strcom);

    try
    {
        // 打开数据库连接
        myconnection.open();

        // 创建并配置sqlcommand对象
        sqlcommand mycommand = new sqlcommand
        {
            connection = myconnection,
            commandtype = commandtype.text
        };

        // 构建更新sql语句
        string strsql = string.format(
            "update student set {0}='{1}' where id='{2}'",
            this.datagridview2.columns[e.columnindex].headertext, // 当前选择的列名
            this.datagridview2.rows[e.rowindex].cells[e.columnindex].value, // 选中单元格修改后的值
            this.datagridview2.rows[e.rowindex].cells[0].value // 选中单元格修改前的值
        );

        // 设置命令文本
        mycommand.commandtext = strsql;

        // 执行更新命令
        int res = mycommand.executenonquery();

        // 检查更新是否成功
        if (res == 0)
        {
            throw new exception("修改失败");
        }
        else
        {
            messagebox.show("修改成功");
        }

        // 关闭数据库连接
        myconnection.close();
    }
    catch (exception ex)
    {
        // 处理异常
        messagebox.show(ex.tostring());
        if (myconnection != null)
        {
            myconnection.close();
        }
    }
}

              (8)对于botton5(删除)

 // 处理button5的点击事件,删除数据
 private void button5_click(object sender, eventargs e)
 {
     // 数据库连接字符串
     string strcom = @"your string;";
     sqlconnection myconnection = new sqlconnection(strcom);

     try
     {
         // 打开数据库连接
         myconnection.open();

         // 创建并配置sqlcommand对象
         sqlcommand mycommand = new sqlcommand
         {
             connection = myconnection,
             commandtype = commandtype.text,
             commandtext = @"delete from student where name = @name"
         };

         // 添加参数并赋值
         mycommand.parameters.add(new sqlparameter("@name", textbox1.text));

         // 执行删除命令
         int res = mycommand.executenonquery();

         // 检查删除是否成功
         if (res == 0)
         {
             messagebox.show("删除失败,未找到对应的记录");
         }
         else
         {
             messagebox.show("删除成功");
             // 更新datagridview显示
             button3_click(sender, e);
         }

         // 关闭数据库连接
         myconnection.close();
     }
     catch (exception ex)
     {
         // 处理异常
         messagebox.show("删除失败: " + ex.message);
         if (myconnection != null)
         {
             myconnection.close();
         }
     }
 }

三.实现

        

四.小结及易错点

小结

本代码实现了一个简单的windows forms应用程序,能够连接本地数据库xscjdb,并进行数据插入、查询和删除操作。主要功能如下:

  1. 连接数据库:通过点击button1,测试与数据库的连接。
  2. 插入数据:通过点击button2,将固定的学生信息插入到数据库的student表中。
  3. 查看数据:通过点击button3,查询并显示student表中的所有数据。
  4. 按姓名查询数据:通过点击button4,根据textbox1中的姓名查询并显示相应的学生数据。
  5. 删除数据:通过点击button5,根据textbox1中的姓名删除相应的学生记录。
易错点
  1. 数据库连接字符串错误

    • 确保连接字符串正确无误,特别是数据库名称、实例名称等。
    • 本示例使用的连接字符串为:@"data source = (localdb)\projectmodels; initial catalog = xscjdb; integrated security = true;"。在实际应用中可能需要调整。
  2. sql语句错误

    • 确保所有sql语句正确无误,特别是表名和字段名必须与数据库中定义的一致。
    • 示例中的表名为student,字段名为id, name, major, grade, tel
  3. 参数化查询

    • 使用参数化查询防止sql注入攻击。
    • 在插入、查询和删除操作中,使用sqlparameter添加参数,确保安全性。
  4. 数据库连接管理

    • 使用using语句或确保在异常情况下正确关闭数据库连接。
    • 本示例中,所有数据库连接均在try-finally块中管理,确保在异常情况下关闭连接。
  5. 异常处理

    • 捕获并处理所有可能的异常,向用户显示有用的错误信息。
    • 在示例中,捕获了所有异常并通过messagebox显示错误信息。
  6. 数据更新和ui同步

    • 确保在数据插入、删除或修改后及时更新ui显示。
    • 在删除操作成功后,通过调用button3_click更新datagridview显示。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com