这个c#simple sql insert我哪里出错了?

时间:2011-03-24 00:37:19

标签: c# .net sql

最后注意:在我将连接字符串从Filename = | DataDirectory | \ testconn.mdf更改为Filename = c:\ Documents之后添加了executeNonQuery AND 之后。 ...... \ testconn.mdf。我的数据开始插入我的表格。谢谢大家的帮助。

在使用这个sql插件时,我发现代码运行时没有任何异常,但在转到数据库资源管理器并查看show table数据后,未插入数据。最初我没有使用事务代码但是在这个站点上读取这可能是它也运行的问题,没有例外但仍然没有实际插入到表中。单步执行时,我可以看到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();

            }
        }

    }
}

10 个答案:

答案 0 :(得分:3)

尝试致电

cmd.ExecuteNonQuery();

之前MASTER_TRANSACTION.Commit();

答案 1 :(得分:2)

我认为你需要在command对象上调用execute方法。

答案 2 :(得分:1)

您还需要通过cmd.ExecuteNonQuery()执行命令。

答案 3 :(得分:1)

尝试cmd.ExecuteNonQuery()执行SQL命令

MSDN Link

答案 4 :(得分:1)

是的,执行cmd,然后在“finally”之前添加:

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

如果有的话,它会显示其他例外情况。

并且您并不需要单个插入的事务开销....如果您这样做,您应该在Exception块中进行回滚。

答案 5 :(得分:1)

你必须执行你的命令。即。

 // 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);
           cmd.ExecuteNonQuery();
            MASTER_TRANSACTION.Commit();

点击此处查看更多信息。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

答案 6 :(得分:1)

您需要执行SQL命令。尝试

cmd.ExecuteNonQuery()

答案 7 :(得分:1)

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

cmd.ExecuteNonQuery();

此外,您应该考虑使用using语句封装连接,因为它会自动处理它,如:

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


}

答案 8 :(得分:1)

尝试在“try”和“finally”中添加“catch”块,以便查看是否发生错误。

目前,您错过了该语句的实际执行情况。添加以下内容以解决该问题:

cmd.ExecuteNonQuery();

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

答案 9 :(得分: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列设为autoincrement