这个c#简单的sql插入哪里出了问题

这个c#简单的sql插入哪里出了问题,c#,.net,sql,C#,.net,Sql,最后一点注意:在添加ExecuteOnQuery之后和将连接字符串从Filename=|DataDirectory |\testconn.mdf更改为Filename=c:\Documents……。\testconn.mdf之后。我的数据开始插入我的表中。谢谢大家的帮助 使用此sql插入时,我发现代码运行时没有任何异常,但在转到数据库资源管理器并查看show table数据后,数据没有插入。最初我没有使用事务代码,但在这个网站上阅读了这可能是问题,它也运行时没有异常,但仍然没有实际插入到表中。在

最后一点注意:在添加ExecuteOnQuery之后和将连接字符串从Filename=|DataDirectory |\testconn.mdf更改为Filename=c:\Documents……。\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();

            }
        }

    }
}
试着打电话

cmd.ExecuteNonQuery();

MASTER_TRANSACTION.Commit()之前

我认为您需要在对象上调用execute方法

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

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


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

它将显示其他例外情况(如果有)


而且,对于单个插入,您实际上不需要事务的开销。。。。如果您这样做了,您应该在异常块中进行回滚。

您必须执行您的命令。i、 e

 // 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();
查看这里了解更多信息。
您需要执行SQL命令。试一试

cmd.ExecuteNonQuery()

您正在创建命令,但没有对其执行任何操作。您缺少一个:

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

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


}
尝试将“catch”块添加到“Try”和“finally”中,以便查看是否发生了错误

目前,您缺少该语句的实际执行。添加以下内容以修复此问题:

cmd.ExecuteNonQuery();
此外,为什么要使用事务?在执行多个语句以确保“全部或无”执行时,事务非常有用。您只需插入一行。

您的命令是:

INSERT INTO Client_Master(Client_ID, Client_First, Client_Last) 
                   VALUES('2', 'Joe', 'Shmoe'). 
我认为问题就在这里。具有客户端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

Client_Master
的架构是什么?谢谢,我按照建议做了这些更改。仍然没有可见的插入到表中,但是如果我再次尝试插入,就会抛出一个主键异常,有什么想法吗?如果Client_ID是主键(?),那么表中已经有一行带有“2”。谷歌搜索“身份栏”,然后使用其中一个。因此,您不会在insert语句中指定客户端ID。对不起,我想我不清楚。例如,如果我尝试输入的下一条记录是Client_ID 4。。。。一旦它运行完代码,记录就不会显示在表中,如果我再次运行代码,将4作为客户端ID,它将抛出异常。就像数据在那里,但没有显示在表中。插入后,您只需刷新数据,它就会在那里。谢谢,我将在另一台机器上尝试。这根本不管用。哈哈,大家都投了我反对票,所以我会继续。谢谢你的回复。问题是记录永远不会被插入到表中。我只在同一个调试会话中收到该错误。如果我停止调试并再次运行它,第一次通过它时运行良好。如果我再按一下按钮,我就会出错。但是,在任何时候,记录都不会真正插入到记录中。所以我被难住了。但我感谢你的意见。
   System.Data.SqlClient.SqlException was caught Message=Violation of PRIMARY KEY
 constraint 'PK_Client_Master'. Cannot insert duplicate key in object dbo.Client_Master.