2012-07-06 32 views
2

我嘗試下面的代碼,但我無法找到it.Here commandText成功消息可以插入,更新,刪除或選擇查詢,我需要的數據集,如果它是一個選擇查詢別人成功消息像SQL結果output("12 row(s) inserted successfully"),因爲我需要的數據集輸出時選擇查詢執行。我不能使用ExecuteScalarExecuteNonQuery方法。如何用C#返回SQL查詢結果消息ASP.net

public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters) 
    { 
     using (SqlConnection cn = new SqlConnection(connectionString)) 
     { 
      cn.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e) 
      { 
       MessageInfo += "\n" + e.Message; 
      }; 
      cn.FireInfoMessageEventOnUserErrors = true; 

      cn.Open(); 
      using (SqlCommand command = new SqlCommand(commandText, cn)) 
      { 

       using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
       { 
        DataSet dt = new DataSet(); 
        adapter.Fill(dt); // Do something with DataTable 
        return dt; 
       } 
      } 
     } 
    } 
+0

有您調試代碼???? – Talha 2012-07-06 11:25:12

+0

我已經看到很多關於此的問題,但似乎唯一真正的選擇是自己實現這些消息。問題是你不會從數據庫中生成實際的消息。 – CSharpened 2012-07-06 11:40:59

+0

yep.i檢查事件處理程序沒有在第一次調用,並且MessageInfo爲空。 – LittleOne 2012-07-06 11:45:44

回答

0

我設法解決它,但希望應該有更好的方法。

string type = Query.Trim().Split(' ')[0].ToLower(); 
    if (type == "select") 
    { 
     DataSet result = SqlHelper.ExecuteDataset(CommandType.Text, Query);     

    } 
    else 
    {     
     if(type == "insert") type="inserted."; else type=type+"d."; 
     int a=(int)SqlHelper.ExecuteNonQuery(CommandType.Text, Query); 
     if (a > 0) 
     { 
      lblInfo.Text = "Query executed successfully. " + a.ToString() + " row(s) " + type;     

     } 
    } 

我發現了另外一個。這比上面的要好。

query = resultQuery + " SELECT '('+CONVERT(VARCHAR(10),@@ROWCOUNT)+' row(s) affected)' AS RESULT"; 
DataSet result = DataSet result = SqlHelper.ExecuteDataset(CommandType.Text, query); 

     if (result.DefaultViewManager.DataViewSettingCollectionString.Contains("Table") == true) 
     { 
      sqlGrid.Visible = true; 
      sqlGrid.DataSource = result; 
      sqlGrid.DataBind(); 
     } 
     if (sqlGrid.Rows.Count==1 && sqlGrid.Rows[0].Cells.Count==1) 
     { 
      string text = (sqlGrid.Rows[0].Cells[0]).Text; 
      if (text.Contains("row(s) affected")) 
      { 
       lblInfo.Text=text; 
       lblInfo.Visible=true; 
       sqlGrid.DataSource = null; 
       sqlGrid.DataBind(); 
      } 
     } 
1

我使用的System.Data版本4.0.0.0和以下適用於我的UPDATE,INSERT,DELETE和SELECT語句。

using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
{ 
    var rowsAffected = -1; 

    adapter.SelectCommand.StatementCompleted += delegate (object sender, StatementCompletedEventArgs e) 
    { 
     rowsAffected = e.RecordCount; 
    }; 

    DataSet dt = new DataSet(); 
    adapter.Fill(dt); // Do something with DataTable 
    return dt; 
}