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

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

2024年08月02日 Asp.net 我要评论
1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework)2.打开“视图-服务器资源管理器”,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新SQL Server 数据库】选项,弹出“创建新的SQL Server数据库”对话框。3.对应项目,系统添加数据库连接。(要是电脑没有sql server,可以选中“视图-sql server资源管理器”创建数据库)连接成功即如下(第一次可能只有一个)

一.创建数据库

用vs 创建数据库的步骤:

1.打开vs,创建一个新项目,分别在搜素框中选择c#、windows、桌面,然后选择windows窗体应用(.net framework)

2.打开“视图-服务器资源管理器”,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新sql server 数据库】选项,弹出“创建新的sql server数据库”对话框。

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

连接成功即如下(第一次可能只有一个)

4.新建数据库xscjdb(学生成绩数据库),点开第二个小三角-右键点击数据库-添加新数据库

自己取名(最好采用英文命名)

5.选中该数据库并创建新表student,点击新建数据库前的小三角-右键表-添加新表

6.表中插入属性,双击即可打开

7.右键选中表查看表中数据

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

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

(2)双击botton1,进入代码编写(检查数据库的连接)

 private void button1_click(object sender, eventargs e)
 { 
     string strcom = @"data source = (localdb)\projectmodels;initial catalog = xscjdb; integrated security = true;";
     sqlconnection sqlcon;
     using (sqlcon = new sqlconnection(strcom))
     {
         sqlcon.open();
         messagebox.show("数据库连接状态" + sqlcon.state.tostring(), "第一个对话框");
     }
     messagebox.show("数据库连接状态" + sqlcon.state.tostring(), "第二个对话框");

 }

注意:

此处应根据自己的电脑修改,具体步骤如下:

单击刚建的数据库-在右下角解决方案资源管理器中找到连接字符串-复制第一个true前面的内容

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

  private void button2_click(object sender, eventargs e)
  {
      string strcom = @"data source = (localdb)\projectmodels;initial catalog = xscjdb; integrated security = true;";
      sqlconnection conn =null;
      try
      {
          conn = new sqlconnection(strcom);
          conn.open();

          sqlcommand mycmm= new sqlcommand();
          mycmm.connection = conn;

          mycmm.commandtype = commandtype.text;
          mycmm.commandtext = @"insert into
                             student(id,name,major,grade,tel)
                             values(@id,@name,@major,@grade,@tel)";
          mycmm.parameters.add(new sqlparameter("@id", 2022002));
          mycmm.parameters.add(new sqlparameter("@name", "李四"));
          mycmm.parameters.add(new sqlparameter("@major", "cs"));
          mycmm.parameters.add(new sqlparameter("@grade","80"));
          mycmm.parameters.add(new sqlparameter("@tel","13999216"));

          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 = @"data source = (localdb)\projectmodels;initial catalog = xscjdb; integrated security = true;";
     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 = @"data source = (localdb)\projectmodels;initial catalog = xscjdb; integrated security = true;";
           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();
        }
    }
}

三.实现

1.设计界面

2.运行

2.1连接数据库(点击连接数据库-确定-确定)即连接成功

2.2增加数据

2.3查询全部数据

2.4按名字查询

四.小结及易错点

这个windows forms应用程序展示了如何连接本地数据库xscjdb,并实现了数据插入、查询和删除等基本功能。以下是对该应用程序的小结:

1. 数据库连接与测试:通过点击按钮可以测试与数据库的连接,确保应用程序能够成功连接到本地数据库xscjdb。

2. 数据插入:点击相应按钮可以将预设的学生信息插入到数据库的student表中,这提供了一种简单的数据录入方式。

3. 数据查询:通过点击按钮,应用程序能够查询并显示student表中的所有数据,使用户可以轻松地查看数据库中存储的信息。

4. 按姓名查询:应用程序还提供了按姓名查询学生数据的功能,用户只需输入学生姓名,即可获取相应的学生信息。

5. 数据删除:用户可以根据学生姓名删除相应的学生记录,这增加了对数据的管理和维护功能。

在编写这个应用程序时,需要注意以下易错点:

  • 数据库连接字符串的正确性:确保连接字符串中的数据库名称、实例名称等信息正确无误,以保证成功连接到数据库。
  • sql语句的准确性:编写sql语句时,应确保表名和字段名与数据库中定义的一致,以避免出现语法错误。
  • 参数化查询的使用:在执行sql操作时,应该使用参数化查询来防止sql注入攻击,提高数据安全性。
  • 数据库连接的管理:在编写代码时,应该使用try-finally块或者using语句来管理数据库连接,确保在异常情况下正确关闭连接,以避免资源泄漏。
  • 异常处理和错误提示:捕获并处理所有可能的异常,向用户提供友好的错误提示信息,帮助用户理解问题所在并采取相应的措施。

通过对这些易错点的注意和处理,可以确保应用程序的稳定性、安全性和用户友好性。同时,还可以考虑进一步优化应用程序的功能和性能,提升用户体验。

(0)

相关文章:

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

发表评论

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