我在向數據庫插入簡單記錄時遇到困難。我在保存時沒有收到任何錯誤。另外,如果我在程序運行時嘗試檢索它,我可以驗證它是否已插入。但是,一旦我關閉程序並刷新數據庫,它就不會出現在數據庫中。我知道這是一個提交問題,但不知道我在這裏錯過了什麼。在數據庫中保存記錄時提交不起作用
private void saveEmpBtn_Click(object sender, EventArgs e)
{
string aSQL = "INSERT INTO Employee(Id, Name, Type, Email, UTAId, Dept) VALUES (@Id, @Name, @Type, @Email, @UTAId, @Dept) ";
using (conn = new SqlConnection(connectionString))
{
conn.Open();
using (var tx = conn.BeginTransaction())
using (SqlCommand command = new SqlCommand(aSQL, conn))
{
command.Connection = conn;
command.Transaction = tx;
command.Parameters.AddWithValue("@Id", 3);
command.Parameters.AddWithValue("@Type", empTypCmbBx.SelectedItem.ToString());
command.Parameters.AddWithValue("@Name", nmTxtBx.Text);
command.Parameters.AddWithValue("@UTAId", utaIdTxtBx.Text);
command.Parameters.AddWithValue("@Email", emailTxtBx.Text);
command.Parameters.AddWithValue("@Dept", deptTxtBx.Text);
try
{
command.ExecuteNonQuery();
tx.Commit();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
MessageBox.Show("Employee Saved Successfully");
}
}
包括表的數據庫腳本的幾張圖片。模式定義和ID屬性。一些問題:我跟着的例子有employee.mdf
,只有一張桌子。在我的情況下,數據庫名稱是RoomAllocationSystemDatabase
,表名是Employee
。我是否必須將模式包含爲點符號來訪問插入語句中的表?我試過這個。當我這樣做,它說無效的對象。不知道我是否需要在其他地方包含數據庫名稱。
CREATE TABLE [dbo].[Employee]
(
[Id] INT NOT NULL,
[Name] VARCHAR (50) NULL,
[Type] VARCHAR (50) NULL,
[Email] VARCHAR (50) NOT NULL,
[UTAId] VARCHAR (50) NULL,
[Dept] VARCHAR (50) NULL,
[Password] VARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
連接字符串邏輯,同時加載形式app.config
connectionString = ConfigurationManager.ConnectionStrings["RoomAllocationSystem.Properties.Settings.RoomAllocationSystemDatabaseConnectionString"].ConnectionString;
連接字符串:
<connectionStrings>
<add name="RoomAllocationSystem.Properties.Settings.RoomAllocationSystemDatabaseConnectionString"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\RoomAllocationSystemDatabase.mdf;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
不知道爲什麼它沒有提交,但爲什麼你插入一個ID?您應該使用主鍵。也許這就是問題表中有一個主鍵列(Id),你試圖插入沒有IDENTITY_INSERT開/關的記錄 –
@JeremyThompson感謝您的建議。嘗試過一些事情,但迄今爲止沒有成功。如果我刪除Id字段並指定其他字段作爲插入的一部分,則會得到「Id不能爲空」。如果我刪除特定的字段前值和後值除Id外的所有字段,我得到「列名或提供的值數量不匹配表定義」。不知道如何在沒有指定Id的情況下插入。另外,不知道我的表格定義是否正確。 MS Access數據庫中的Id是否會自動插入帶有序列的主鍵? –
如果你想使用這個事務,它應該是'SqlCommand command = new SqlCommand(aSQL,conn,tx)'。見https://msdn.microsoft.com/en-au/library/352y4sff(v=vs.110).aspx – potatopeelings