我試圖記錄在C#中的控件添加到數據庫:爲什麼我沒有收到任何錯誤,但數據庫沒有插入記錄?
public partial class ctrl_Register : UserControl
{
public ctrl_Register()
{
InitializeComponent();
}
private void btn_reg_Click(object sender, EventArgs e)
{
bool ok = false;
int col = 1;
if (tBox_username.Text != "")
{
if (tBox_password.Text != "")
{
if (cBox_colour.Text != "")
{
ok = true;
}
}
}
if (ok)
{
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.data2cString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"INSERT INTO [Table](Id,username,password,colour,bestTime) VALUES ('"+tBox_username.Text+"','"+tBox_password.Text+"','"+cBox_colour.Text+"')";
try
{
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("added");
}
catch (SqlException s)
{
MessageBox.Show(s.Message.ToString(), "Error Message");
}
}
}
}
else
{
MessageBox.Show("no insert");
}
}
}
消息框「添加」顯示出來,所以代碼肯定得到這一點。但是,當我去檢查我的數據庫沒有新的記錄。
這是我創建表的代碼:
CREATE TABLE [dbo].[Table]
(
[Id] INT IDENTITY (0, 1) NOT NULL,
[username] VARCHAR (50) NOT NULL,
[password] VARCHAR (50) NOT NULL,
[colour] VARCHAR (50) DEFAULT ('Orange') NULL,
[bestTime] INT DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
這絕對是在設置文件的正確連接字符串。但是,當我在數據庫瀏覽器中轉到data2.mdf
文件並轉到該表的「顯示數據」時,只有NULL存在。
只是一個側面說明,使用參數,而不是連接SQL字符串與文本框的值,以避免安全問題。 – LightBulb
在ExecuteNonQuery語句上放置一個斷點。運行代碼,它會暫停。將cmd commandText屬性捕獲到剪貼板中。打開SSMS並嘗試在那裏運行它。觀察結果。這種調試技術將爲您節省數小時的時間。 – nicomp
你的'INSERT'語句有5個列名,但你只提供3個列值。我驚呆了,這不會給你一個SQL異常。 –