2012-06-24 25 views
0

我剛開始使用SQL Server 2008.我有一個winforms應用程序,它必須將數據從應用程序插入到數據庫中,並且某些文本框的值可能爲空。谷歌搜索後,我怎麼找到了一些東西,但我會解釋。使用C#Winforms將行插入到SQL Server中

我發現這個代碼插入記錄到數據庫(不包括連接代碼)

stringInsert += "INSERT INTO MyDatabase(dateTime, Name, Surname)"; 
stringInsert += "VALUES(@Date, @NameString, @SurnameString)"; 

SqlCommand cmd = new SqlCommand(stringInsert, con); 

cmd.CommandType = CommandType.Text; 
cmd.Parameters.Add(new SqlParameter("@Date", strTime)); 
cmd.Parameters.Add(new SqlParameter("@Name", StringName)); 
cmd.Parameters.Add(new SqlParameter("@Surname", StringSurname)); 

if (string.IsNullOrEmpty(StringName)) 
    cmd.Parameters.Add(new SqlParameter("@Name", DBNull.Value.ToString())); 
else 
    cmd.Parameters.Add(new SqlParameter("@Name", StringName)); 

都是別人寫的方法cmd.Parameters.AddWithValue("@Name" , StringName);

做,如果別人在自動,因爲如果StringName爲空或空它集DBNull.Value

現在我的問題是:

  1. 我不明白cmd.Parameters.Add(new SqlParameter("@Name", StringName));如何修改stringInsert成StringName。 「@Name」它只是字符串的一部分,所以也許符號「@」做了一些我不知道的事情?通常我使用@符號當我需要排除像這樣的方式逃脫@「c:\ home」

  2. 是否正確使用cmd.Parameters.AddWithValue("@Name" , StringName);即使StringName爲空或空?

  3. 這是正確的方式提交數據到SQL Server數據庫與WinForm應用程序中的許多文本框?

由於

回答

2

1)在@name是一個佔位符。您正在要求NET Engine將@Name佔位符替換爲相同命名參數的值。 (對於不支持命名參數的ADO NET提供者,這是不同的)
2)當你想在數據庫中插入NULL時,應該使用DBNull.Value,所以你的代碼應該是cmd.Parameters.AddWithValue("@Name" , string.IsNullOrEmpty(StringName) ? DBNull.Value : StringName);
3)是的,這個是正確的路要走。始終使用參數化查詢。和using陳述`

+0

非常感謝!祝你今天愉快! – user1107078

相關問題