C# 預存程序呼叫及或傳送SQL回資料庫
預存程序呼叫
SqlParameter[] parameters = {
new SqlParameter("@name" , SqlDbType.Type , size)
}; //parameters不一定要有東西 可以空白,也就是沒有輸入值
DataTable dt = ReadStoredPorcedure("sp_name", parameters, "table_name");
protected DataTable ReadStoredPorcedure(string sp_name, SqlParameter[] parameters, string tableName)
{
DataSet ds = new DataSet();
SqlCommand sqlCommand = new SqlCommand(sp_name, myConnection);
try
{
myConnection.Open();
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandTimeout = 0;
foreach (SqlParameter sqlP in parameters)
sqlCommand.Parameters.Add(sqlP).Value = sqlP.Value;
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCommand);
sqlDA.Fill(ds, tableName);
}
catch (Exception ex)
{
ShowMessage("資料庫錯誤 請聯絡系統管理者");
}
finally
{
sqlCommand.Parameters.Clear();
myConnection.Close();
}
return ds.Tables[tableName];
}
接著就可以使用dt進行DataSource的連結
接著,可以把上述的東西寫入SqlHelper(自定義類別)中並自行命名
以後就可以呼叫SqlHelper.ReadStoredPorcedure("sp_name", parameters, "table_name"); 就不需要在每個程式都寫ReadStoredProcedure()了
關於CommandType
CommandType 有三種類型
第一種Text 可以用string sql = "sql語法" 傳送進DB,難點在於可能出錯,因為C#不會幫你的SQL DEBUG
第二種是StoredProcedure 這種方法需要輸入StoredProcedure的名稱以及參數(非必填)才能啟動
但是由於StoredProcedure是已經寫好並且可以執行的程序,因此至少他能動。
第三種是TableDirect 這種方法我沒使用過,貌似是直接抓資料表。
留言
張貼留言