2011-03-24 55 views
0

最后请注意:| | DataDirectory目录\ testconn.mdf到filename = C添加的ExecuteNonQuery 后,我从文件名=改变了连接字符串之后。 ....... \ testconn.mdf。我的数据开始插入到我的表格中。感谢所有的帮助。我在哪里出了毛病此C#简单的SQL插入

虽然这个SQL INSERT我发现代码运行没有任何异常,但将数据库浏览和看节目表数据后的工作,数据未插入。最初我没有使用事务代码,但在这个网站上阅读这可能是它也没有例外但仍然没有实际插入到表中的问题。在逐步完成的过程中,我可以看到conn.Open()和connClose()语句后状态从打开到关闭的状态。另外最好的做法是有一个更清洁/更好的方式来写我的SqlConnection字符串以及我的SqlCommand字符串?谢谢我的代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 
using System.Transactions; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 

      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      CommittableTransaction MASTER_TRANSACTION = new CommittableTransaction(); 
      // 1. Instantiate the connection 
      SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\testconn.mdf;Integrated Security=True;User Instance=True"); 


        try 
      { 
       // 2. Open the connection 
       conn.Open(); 
       conn.EnlistTransaction(MASTER_TRANSACTION); 

       // 3. Pass the connection to a command object 
       SqlCommand cmd = new SqlCommand("INSERT INTO Client_Master(Client_ID, Client_First, Client_Last) VALUES('2', 'Joe', 'Shmoe')", conn); 
       MASTER_TRANSACTION.Commit(); 

      } 
      finally 
      { 

      conn.Close(); 

      } 
     } 

    } 
} 
+0

什么是'Client_Master'的架构? – 2011-03-24 00:38:29

回答

3

尝试调用我认为你需要呼吁的command对象的execute方法

cmd.ExecuteNonQuery(); 

MASTER_TRANSACTION.Commit();

2

1

你需要通过cmd.ExecuteNonQuery()以执行命令为好。

1

是,执行cmd并与前行,然后右键 “终于” 添加:

catch (Exception ex) { 
    MessageBox.Show(ex.Message); 
} 

,它会显示其他异常如果有的话。

而且你并不真的需要一个事务的开销单个插入....如果你做了你应该在异常块回滚。

+0

谢谢我按照建议进行了这些更改。仍然没有可见的插入到表中,但如果我尝试再次这样做,我会抛出一个主键异常,任何想法? – JRB 2011-03-24 00:59:59

+0

如果Client_ID是您的主键(?),那么表中已经有一行中包含“2”的行。谷歌为“身份专栏”,然后使用其中之一。所以你不会在你的insert语句中指定Client_ID。 – JBrooks 2011-03-24 01:11:26

+0

对不起,我猜我不清楚。例如,如果我尝试输入的下一条记录是Client_ID 4 ....一旦它通过代码运行,记录不会显示在表中,如果我再次运行代码并保留4作为Client_ID,它将引发异常。这就像数据在那里,但没有在表格中显示。 – JRB 2011-03-24 01:33:14

1

您需要执行的SQL命令。尝试

cmd.ExecuteNonQuery() 
1

您正在创建该命令,但未对其执行任何操作。你错过了一个:

cmd.ExecuteNonQuery(); 

此外,你应该考虑用封装using语句的连接,因为它会自动部署它,如:

using(SqlConnection conn = new SqlConnection(connectionString)) 
{ 


} 
1

尝试将“捕捉”块“尝试”和“最后”,以便您可以查看是否有错误发生。

目前,你缺少的语句实际执行。添加以下内容以解决此问题:

cmd.ExecuteNonQuery(); 

此外,为什么使用交易?执行多个语句以确保执行“全部或不执行”时,事务很有用。你只是插入一行。

1

您的cmd是:

INSERT INTO Client_Master(Client_ID, Client_First, Client_Last) 
        VALUES('2', 'Joe', 'Shmoe'). 

,我认为这问题是在这里。与Client_ID列。您已将此列设置为主键。但是你每次都要插入'2'。对于这个原因,它给你

System.Data.SqlClient.SqlException was caught Message=Violation of PRIMARY KEY 
constraint 'PK_Client_Master'. Cannot insert duplicate key in object dbo.Client_Master. 

可以使CLIENT_ID列自动增量

+0

感谢您的回复。事情是记录永远不会被插入到表中。我只在同一个调试会话期间发生错误。如果我停止调试并再次运行,第一次通过它运行良好。如果我再次点击按钮,我会看到错误。但是记录从来没有真正插入到记录中。所以我很难过。但我很欣赏你的意见。 – JRB 2011-03-24 14:12:15