2013-10-29 114 views
0

我一直试图让下面的代码写入我的SQL Server CE数据库几个月没有成功。我的尝试捕获不会引发错误,但我的数据没有写入。有没有人看到我这样做的方式有什么问题?需要帮助写入SQL Server CE表

conn = new SqlCeConnection("Data Source = LaZSolutions.sdf"); 
conn.Open(); 

var id = Guid.NewGuid(); 

SqlCeCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "INSERT INTO Customers (FirstName, LastName, Address, City, State, Zip, Phone, Mobile, Email, CustomerNum) VALUES(@FirstName, @LastName, @Address, @City, @State, @Zip, @HomePhone, @MobilePhone, @Email, @CustomerNum)"; 

cmd.CommandType = CommandType.Text; 
cmd.Connection = conn; 
cmd.Parameters.AddWithValue("@FirstName", txtFName.Text); 
cmd.Parameters.AddWithValue("@LastName", txtLName.Text); 
cmd.Parameters.AddWithValue("@Address", txtAddress.Text); 
cmd.Parameters.AddWithValue("@HomePhone", txtHPhone.Text); 
cmd.Parameters.AddWithValue("@MobilePhone", txtMPhone.Text); 
cmd.Parameters.AddWithValue("@City", txtCity.Text); 
cmd.Parameters.AddWithValue("@State", txtState.Text); 
cmd.Parameters.AddWithValue("@Zip", txtZip.Text); 
cmd.Parameters.AddWithValue("@Email", txtEmail.Text); 
cmd.Parameters.AddWithValue("@CustomerNum", id); 

cmd.ExecuteNonQuery(); 

conn1 = new SqlCeConnection("Data Source = LaZSolutions.sdf"); 
conn1.Open(); 

SqlCeCommand cmd1 = conn1.CreateCommand(); 
cmd1.CommandText = "INSERT INTO Orders (OrderNum, OrderDate, Cost, [Open], Comments) VALUES(@OrderNum, @OrderDate, @Cost, @Open, @Comments)"; 

cmd1.CommandType = CommandType.Text; 
cmd1.Connection = conn1; 
cmd1.Parameters.AddWithValue("@OrderNum", txtOrderNum.Text); 
cmd1.Parameters.AddWithValue("@OrderDate", txtOrderdate.Text); 
cmd1.Parameters.AddWithValue("@Cost", lblPrice.Text); 
cmd1.Parameters.AddWithValue("@Open", open); 
cmd1.Parameters.AddWithValue("@CustomerNum", id); 
cmd1.Parameters.AddWithValue("@Comments", txtComments.Text); 

cmd1.ExecuteNonQuery(); 
conn1.Close(); 
conn.Close(); 
+0

您不需要两次打开连接 – Jonesopolis

+0

您是否在项目项目中列出了您的SDF文件?您是否使用“服务器管理器”窗口检查此文件的内容?服务器管理器显示的数据库文件的位置在哪里? – Steve

回答

2

您的代码似乎是正确的(虽然你是不是你的封闭与using语句和开放的一次性元件,而不需要两次相同的连接),但是,您的SDF文件没有任何路径连接字符串中列出。这意味着这个文件应该在你的程序运行的同一个文件夹中。当您调试程序时,可执行文件将在BIN \ DEBUG目录中运行,并且如果插入成功,数据将被插入BIN \ DEBUG目录中的SDF文件中。

您可以检查您的插入是否工作将一个整型变量赋值给ExecuteScalar的返回值。如果这个变量是1,那么你的代码已经插入了记录。

现在,如果您使用Server Manager检查文件的内容,则需要确保显示的数据库与BIN \ DEBUG中的数据库相同,而不是通常存在于项目文件夹根目录中的基本文件。

另一种可能性是文件所在文件夹的写入权限有问题,但这会导致异常。