2012-11-05 91 views
0

在我的方案中,我想插入具有15列數據的sql語句。是否有任何其他方式來處理插入語句的參數?C#:如何在MySQL中插入語句動態插入多個參數

public bool GetCustomersList(ref DataSet dataset, String x, String y, string z, string x1, string y1, string z1) 
    { 
     MySqlConnection SQLConn = GetConnection(); 
     try 
     { 
      string get_records; 
      if (SQLConn.State == ConnectionState.Closed) 
      { 
       SQLConn.Open(); 
      } 
      if (searchtype == "x") 
      { 
       get_records = "INSERT into table values(x, y,z,x1,y1,z1); 
      } 
      MySqlCommand command = new MySqlCommand(get_records, SQLConn); 
      MySqlDataAdapter mySqlAdapter = new MySqlDataAdapter(command); 
      mySqlAdapter.Fill(dataset); 

      if (SQLConn.State == ConnectionState.Open) 
      { 
       SQLConn.Close(); 
      } 
      return true; 
     } 
     catch (Exception) 
     { 
      if (SQLConn.State == ConnectionState.Open) 
      { 
       SQLConn.Close(); 
      } 
      return false; 
     } 
    } 

這裏的參數可能會擴展到15或更多?如何在asp.net中處理這種情況?

回答

0

我會建議你使用:

command.Parameters.Add(...); 
1

這將這樣做。

  List<SqlParameter> myParamList = new List<SqlParameter>(); 
      SqlParameter myParam = default(SqlParameter); 


      myParam = new SqlParameter("@RoomID", SqlDbType.Int); 
      myParam.Value = x 
      myParamList.Add(myParam); 

基本上,你創建你的參數列表,併爲每個參數添加它使用新的SqlParameter,並指出項目名稱&項目類型。

然後將參數列表添加到命令中。

0

MSDN

使用CreateParameter方法創建具有指定 名稱,類型,方向,大小和值的新的參數對象。您在參數中傳遞的任何值 都會寫入相應的參數 屬性。

使用內聯參數是不安全的,可能導致sql注入。改爲使用SqlParameter是向.Net中的sql語句提供參數的prefered and more secure方式。

另外,如果你想成爲更純粹的和相同的擺脫依賴於從代碼中具體實現的,使用更多的接口來代替,例如:

using (var connection = GetConnection()) 
{ 
    connection.Open(); 
    using (var command = connection.CreateCommand()) 
    { 
     command.CommandType = CommandType.Text; 
     command.CommandText = "INSERT into table(x, y) VALUES (@x, @y)"; 
     command.Parameters.Add(CreateParameter(command, "@x", x, DbType.String)); 
     command.Parameters.Add(CreateParameter(command, "@y", y, DbType.String)); 
     command.ExecuteNonQuery(); 
    } 
} 

在您的自定義CreateParameter包裝具有以下執行:

private IDataParameter CreateParameter(IDbCommand command, string name, object value, DbType type) 
{ 
    var parameter = command.CreateParameter(); 
    parameter.ParameterName = name; 
    parameter.Value = value; 
    parameter.DbType = type; 
    return parameter; 
} 

一樣的,你扔掉多餘的類特定類型,如:MySqlCommandSqlParameter。此外,沒有必要使用try{} catch{}Using語句將關閉處置連接,即使在引發異常時也是如此。如果您不需要,請勿在每次請求後打開和關閉連接。利用connection pooling