2

次のコードを試しましたが、そこから成功メッセージが見つかりませんでした。ここでは、挿入、更新、削除、またはcommandText選択クエリを実行できます。選択クエリの場合はデータセットが必要です。それ以外の場合は、SQL 結果のような成功メッセージが表示されますoutput("12 row(s) inserted successfully")。選択クエリが実行されたときにデータセット出力が必要なので、メソッド。ExecuteScalarExecuteNonQuery

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;
                }
            }
        }
    }
4

2 に答える 2

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;
}
于 2015-12-31T18:07:22.750 に答える
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();
            }
        }
于 2012-07-07T13:02:53.923 に答える