2011-03-31 18 views
1

我的winform中有十個文本框,我需要將這些文本框中鍵入的文本保存到sql數據庫表的10列中。所以,對於這個將我寫:使用SqlCommand,如何添加多個參數到它的對象,通過winform在sql表中插入

INSERT INTO item (c1,c2,c3...,c10) values (@a,@[email protected]) 

cmd.Parameters.Add("@a",SqlDbType.Varchar) 
cmd.Parameteres["@a"].Value=textbox1.Text; 

cmd.Parameters.Add("@b",SqlDbType.Varchar) 
cmd.Parameteres["@b"].Value=textbox2.Text;. 
. 
. 
. 
. 
cmd.Parameters.Add("@j",SqlDbType.Varchar) 
cmd.Parameteres["@j"].Value=textbox10.Text; 

OR 10條用於每個文本框單獨的查詢:

INSERT INTO item (c1) values (@a) 
cmd.Parameters.Add("@a",SqlDbType.Varchar) 
cmd.Parameteres["@a"].Value=textbox1.Text; 

INSERT INTO item (c2) values (@b) 
cmd.Parameters.Add("@b",SqlDbType.Varchar) 
cmd.Parameteres["@b"].Value=textbox2.Text;. 
. 
. 
INSERT INTO item (c10) values (@j) 
cmd.Parameters.Add("@j",SqlDbType.Varchar) 
cmd.Parameteres["@j"].Value=textbox10.Text; 

,或者請建議高效的代碼。

如何在一個語句中添加多個參數到cmd中?可能嗎?

回答

9

您可以使用擴展方法,像這樣:

public static class DbCommandExtensions 
{ 
    public static void AddInputParameters<T>(this IDbCommand cmd, 
     T parameters) where T : class 
    { 
     foreach (var prop in parameters.GetType().GetProperties()) 
     { 
      object val = prop.GetValue(parameters, null); 
      var p = cmd.CreateParameter(); 
      p.ParameterName = prop.Name; 
      p.Value = val ?? DBNull.Value; 
      cmd.Parameters.Add(p); 
     } 
    } 
} 

然後調用它像這樣:

cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ }); 

我用,在沒有問題的幾個項目。

+0

先生,我正在使用.net 2.0,所以在'var'和<>的位置,我應該使用什麼? – sqlchild 2011-04-04 07:14:18

+1

IDbCommand.CreateParameter返回一個IDbDataParameter,所以聲明「p」。否則,就我所知,這應該在.NET 2.0中正常工作。 – 2011-04-04 07:36:59

9

我想你可以使用Parameters.AddWithValue()方法。

cmd.Parameters.AddWithValue("@j",textbox10.Text); 
cmd.Parameters.AddWithValue("@k",textbox11.Text); 
cmd.Parameters.AddWithValue("@l",textbox12.Text); 
0

你可以使用這樣的功能:

void AddParams(DBCommand cmd,params object[] parameters) 
{ 
    if (parameters != null) 
    { 
     int index = 0; 
     while (index < parameters.Length) 
     { 
      cmd.Parameters.AddWithValue("@"+(string)parameters[index], parameters[index + 1]); 
      index += 2; 
     } 
    } 
} 

不是最好的可能,但功能。 呼叫此鏈接:

AddParams(a,"test1",b,3,c,DateTime.Now); 

或者你可以使用一個擴展像@馬特漢密爾頓建議中的DBCommand類中添加此功能。

2

你在你的問題中提出的2'解決方案'在語義上是不同的。 你應該使用哪一個,取決於你的表格佈局。

第一個解決方案在表中插入一條記錄,第二條插入語句爲每個值(文本框)插入一條記錄(行)。

在這裏很難給出一個很好的答案,因爲我們不知道你將要保存在該表中,因此,我們不能說你應該如何保存它(你如何保存它,是繼承依賴於你應該調用SQL插入語句)。

+0

先生,我編輯了我的文章 – sqlchild 2011-04-04 06:52:12

相關問題