Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我的ADO.NET代码有什么问题?_Sql Server_Ado.net - Fatal编程技术网

Sql server 我的ADO.NET代码有什么问题?

Sql server 我的ADO.NET代码有什么问题?,sql-server,ado.net,Sql Server,Ado.net,有人能帮我用ADO.NET来识别这个程序中的错误吗 代码: 代码还显示与某些缺少的程序集相关的错误消息。在代码中引用程序集之前,您必须向系统添加程序集引用。: 右键单击项目中的“引用”文件夹 选择“添加引用…” 从.NET程序集列表中选择“System.Transactions” 除了John回答的问题外,我还强烈建议您开始将SqlConnection和SqlCommand放入using()块中-这将保证它们在生命周期结束时被处理掉,并有助于避免bug 所以不是 SqlConnection

有人能帮我用ADO.NET来识别这个程序中的错误吗

代码:


代码还显示与某些缺少的程序集相关的错误消息。

在代码中引用程序集之前,您必须向
系统添加程序集引用。

  • 右键单击项目中的“引用”文件夹
  • 选择“添加引用…”
  • 从.NET程序集列表中选择“System.Transactions”

  • 除了John回答的问题外,我还强烈建议您开始将
    SqlConnection
    SqlCommand
    放入
    using()
    块中-这将保证它们在生命周期结束时被处理掉,并有助于避免bug

    所以不是

       SqlConnection con = new SqlConnection();
       con.ConnectionString = connectString;
    
       con.Open();
    
       SqlTransaction tr = null;
       tr = con.BeginTransaction();
    
       SqlCommand cmd = new SqlCommand("INSERT INTO sunny1(name, id, city, phone, pincode) VALUES ('sandy', 01441, 'abc', 'phone', 122001)", con, tr); 
       cmd.ExecuteNonQuery();
       tr.Commit();
    
    你应使用:

       using(SqlConnection con = new SqlConnection(connectString))
       { 
          SqlTransaction tr = con.BeginTransaction();
    
          using(SqlCommand cmd = new SqlCommand("....", con, tr))
          {
             con.Open();
             cmd.ExecuteNonQuery();
             tr.Commit();
             con.Close();
          }     
       }     
    
    还请记住:始终尽可能晚地打开连接(当您仍然需要创建其他对象时,无需打开连接-只需在调用
    ExecuteNonQuery()
    之前打开连接),并尽快明确关闭连接(不要让连接保持打开状态,等待
    最后{}
    块发生)


    Marc

    您必须删除有问题的行:

    using System.Transactions;
    
    代码中不使用System.Transactions中的任何内容


    或者,如果要保留using指令,请添加对System.Transactions程序集的引用。

    在本例中,不需要在事务中封装单个命令。与此相反:

       con.Open();
    
       SqlTransaction tr = null;
       tr = con.BeginTransaction();
    
       SqlCommand cmd = new SqlCommand("INSERT INTO sunny1(name, id, city, phone, pincode) VALUES ('sandy', 01441, 'abc', 'phone', 122001)", con, tr); 
       cmd.ExecuteNonQuery();
       tr.Commit();
    
    您可以使用更少的代码行执行相同的操作:

       con.Open();
    
       SqlCommand cmd = new SqlCommand("INSERT INTO sunny1(name, id, city, phone, pincode) VALUES ('sandy', 01441, 'abc', 'phone', 122001)", con); 
       cmd.ExecuteNonQuery();
    

    您需要提供更多详细信息,否则您将得不到任何有用的答案在标题中写入所有大写字母有什么具体原因吗?他已经在使用cn.Close()(相当于Dispose FOR SqlConnection)处理连接,并且SqlCommand.Dispose()在他的情况下不做任何操作(仅当组件位于ISite中时)(但一般来说,如果实现了IDisposable,那么最好还是调用它)@Pop Catalin:他正在调用cn.Close(),但使用块要简洁得多,也更容易理解。@PopCatalin:是的,他是-但他可以早一点做。越晚打开,越快关闭是格言。
       con.Open();
    
       SqlCommand cmd = new SqlCommand("INSERT INTO sunny1(name, id, city, phone, pincode) VALUES ('sandy', 01441, 'abc', 'phone', 122001)", con); 
       cmd.ExecuteNonQuery();