c#cant insert row但可以选择

时间:2014-01-14 19:19:19

标签: c# sql-server

c#开发人员,您能说出这个简单代码中的错误吗?

public SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["WpfApplication.Properties.Settings.BRDSConnectionString"].ToString());
public DataTable dt;
private void FillDataGrid()
{
    //SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["WpfApplication.Properties.Settings.BRDSConnectionString"].ToString());
    SqlCommand comm = new SqlCommand("select * from B_RDS_DIST",con);
    SqlDataAdapter da = new SqlDataAdapter(comm);
    dt = new DataTable();
    da.Fill(dt);

    CBDist.ItemsSource = dt.DefaultView;
    CBDist.DisplayMemberPath = "NAM";
    CBDist.SelectedValuePath = "KEY";
    try
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("INSERT INTO B_RDS_DIST (NAM) VALUES (@NAM)", con);
        cmd.Parameters.Add("@NAM", SqlDbType.VarChar, 255).Value="sadName";
        da.InsertCommand = cmd;
        da.InsertCommand.ExecuteNonQuery();
        MessageBox.Show("Row inserted !! ");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

}

我可以选择,但不能插入。这里没有任何例外。 表只有两列KEY(PK,AI)和NAM(varchar 255)。 可能是我需要做一些连接以允许插入,或者我错过了什么? 感谢。

加入


差点忘了,我使用mdf文件,所以connectionString看起来像:

"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\BRDS.mdf;Integrated Security=True"

答案 - 复制 - 粘贴请求,我没有争论。


天啊,生成的连接字符串是如此剧烈的老问题!

旧连接字符串:

connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\BRDS.mdf;Integrated Security=True"

新连接字符串:

connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Im awsome\Documents\Visual Studio 2013\Projects\WpfApplication\WpfApplication\BRDS.mdf;Integrated Security=True"

插入/删除/更新效果很好。

我现在只有两个“简单的问题”: 1)如何使用dataTable更新数据库中的简单表。我是否需要使用一列“NAM”创建数据表? 2)为什么用连接字符串很难发现这个该死的简单问题!? :d

2 个答案:

答案 0 :(得分:1)

这不是您使用DataAdapter的方式,您需要调用da.Update(dt)来调用需要在DataTable上执行的任何插入,更新或删除查询,以反映您对原始DataTable所做的任何更改。< / p>

要么完全从数据适配器中分离出插入命令,要么将行添加到从Fill(dt)填充的数据表中,并且不要使用单独的连接字符串(实际上最好不要编写自己的插入完全使用SqlCommandBuilder并只执行da.InsertCommand = cmdBuilder.GetInsertCommand();,它将根据您传入DataAdapter的Select自动构建插入内容

答案 1 :(得分:1)

如果你想这样做......

编辑:

SqlDataAdapter lcDataAdapter = new SqlDataAdapter()
lcDataAdapter.InsertCommand = new SqlCommand("INSERT INTO B_RDS_DIST (NAM) VALUES (@NAM)", con);
lcDataAdapter.InsertCommand.Parameters.Add("@NAM", SqlDbType.VarChar, 255).Value="sadName";
lcDataAdapter.InsertCommand.ExecuteNonQuery();

注意:我不会在数据适配器上使用InsertCommand方法来插入记录,但这是开发人员首选的情况。以上内容应该适用于你。