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
答案 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方法来插入记录,但这是开发人员首选的情况。以上内容应该适用于你。