数据没有插入表格?
我的表名是Customer
。 它有四列
CustomerId CustomerName CustomerAddress PhoneNo
这是我的c#代码。 我没有得到任何例外,数据没有插入数据库。
string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VictoryDatabase.mdf;Integrated Security=True;User Instance=True"; SqlConnection myConnection = new SqlConnection(connString); try { myConnection.Open(); string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)"; SqlCommand myCommand = new SqlCommand(query,myConnection); myCommand.Parameters.AddWithValue("CustNm",Print[0].CustomerName); myCommand.Parameters.AddWithValue("CustAdd",Print[0].Address); myCommand.Parameters.AddWithValue("Ph",Print[0].Telephone); Console.WriteLine(Print[0].Telephone); myCommand.ExecuteNonQuery(); myConnection.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); }
正如我之前在这个网站上所说的那样 – 整个用户实例和AttachDbFileName =方法都存在缺陷 – 充其量! Visual Studio将复制.mdf
文件, 很可能 ,你的INSERT
工作得很好 – 但你最后只是查看错误的.mdf文件 !
如果你想坚持这种方法,那么尝试在myConnection.Close()
调用上设置一个断点 – 然后用SQL Server Mgmt Studio Express检查.mdf
文件 – 我几乎可以肯定你的数据在那里。
我认为真正的解决方案是
-
安装SQL Server Express(你已经完成了)
-
安装SQL Server Management Studio Express
-
在SSMS Express中创建数据库,给它一个逻辑名称(例如
VictoryDatabase
) -
使用其逻辑数据库名称 (在服务器上创建时给定)连接到它 – 并且不要乱用物理数据库文件和用户实例。 在这种情况下,您的连接字符串将是这样的:
Data Source=.\\SQLEXPRESS;Database=VictoryDatabase;Integrated Security=True
其他一切都和以前完全一样……
你所说的根本不会发生。 查询将插入记录,否则您将获得exception。
但是,您的查询中存在错误。 @CustAdd
参数周围不应该有撇号,这会使数据库将其解释为文字字符串,而不是参数:
string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,@CustAdd,@Ph)";
我不确定数据库会如何反应,但是你会得到一个exception,告诉你你有一个从未在查询中使用的参数,或者它会插入一个值为@CustAdd
作为地址的记录。
- 您确定要查看正确的数据库以确认没有插入数据吗?
- 您是否在未提交的事务的上下文中执行此插入?
你没有指定相同的参数,(忘了添加“@”就像这样:
string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)"; SqlCommand myCommand = new SqlCommand(query,myConnection); myCommand.Parameters.AddWithValue("@CustNm",Print[0].CustomerName); myCommand.Parameters.AddWithValue("@CustAdd",Print[0].Address); myCommand.Parameters.AddWithValue("@Ph",Print[0].Telephone);
CustomerId是否设置为Customer表上的AutoIncrementing PK? 此外,您不需要’@CustAdd’参数上的单引号(’);