标签: executenonquery

在ExecuteNonQuery上获取受影响的行

我目前正在开发一个C#项目,我正在运行一个插入查询,它也同时进行选择,例如:

INSERT INTO table (SELECT * FROM table WHERE column=date)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以看到在此查询期间插入了多少行?

.net c# mysql sql executenonquery

42
推荐指数
3
解决办法
8万
查看次数

返回标识值时,ExecuteScalar vs ExecuteNonQuery

试图弄清楚它是否最好使用,ExecuteScalar或者ExecuteNonQuery我是否想要返回新插入行的标识列.我已经阅读了这个问题并且我理解那里的差异,但是当我查看几周前我写的一些代码时(虽然从这个网站大量借用)我发现在我使用的插件中ExecuteScalar,就像这样:

public static int SaveTest(Test newTest)
{
    var conn = DbConnect.Connection();
    const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
                             "               VALUES ( @tester , @premise ) " +
                             "SET @newId = SCOPE_IDENTITY(); ";
    using (conn)
    {
        using (var cmd = new SqlCommand(sqlString, conn))
        {
            cmd.Parameters.AddWithValue("@tester", newTest.tester);
            cmd.Parameters.AddWithValue("@premise", newTest.premise);
            cmd.Parameters.Add("@newId", SqlDbType.Int).Direction = ParameterDirection.Output;

            cmd.CommandType = CommandType.Text;
            conn.Open();
            cmd.ExecuteScalar();

            return (int) cmd.Parameters["@newId"].Value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我需要的东西很好,所以我很想知道

  1. 我是否应该在ExecuteNonQuery …

c# sql-server executescalar executenonquery

22
推荐指数
1
解决办法
7万
查看次数

ExecuteNonQuery()始终返回-1

我正在使用存储过程在表中插入一些值.

CREATE PROCEDURE [dbo].[Sp_InsertValue]
@Val1 as nvarchar(50)
@Val2 as nvarchar(50)
as
BEGIN
    IF NOT EXISTS(SELECT * FROM @mytable WHERE ID=@Val1)
    INSERT INTO @mytable VALUES(@VAL2)
END
Run Code Online (Sandbox Code Playgroud)

我使用ExecuteNonQuery()使用C#在ASP.NET中调用此存储过程.它工作正常,没有问题,如果它们不存在,它会插入值.问题是cmd.ExecuteNonQuery()始终返回-1.我希望如果插入一条记录,它应该返回1,如果不是,则返回0,对吗?

c# asp.net executenonquery

21
推荐指数
1
解决办法
2万
查看次数

为什么"ExecuteNonQuery"中的"Non"?

我知道这不是一个有用的问题的地狱,但我不禁被它所困扰.

那么,
为什么所说的方法(在*Command类中)被称为
ExecuteNonQuery而不是ExecuteQuery

这些SQL语句不是我们在DBs,查询中抛出的吗?

.net sqlcommand oledbcommand dbcommand executenonquery

18
推荐指数
1
解决办法
1271
查看次数

通过C#使用ado.net将值插入SQL Server数据库

我创建了一个简单的程序来将值插入表中[regist],但我不断收到错误

')附近的语法不正确

cmd.ExecuteNonQuery();:

 private void button1_Click(object sender, EventArgs e)
 {
      SqlConnection cn = new SqlConnection("Data Source=DELL-PC;initial catalog=AdventureWorks2008R2 ; User ID=sa;Password=sqlpass;Integrated Security=SSPI;");

      SqlCommand cmd = new SqlCommand("INSERT INTO dbo.regist (" + " FirstName, Lastname, Username, Password, Age, Gender,Contact, " + ") VALUES (" + " @textBox1.Text, @textBox2.Text, @textBox3.Text, @textBox4.Text, @comboBox1.Text,@comboBox2.Text,@textBox7.Text" + ")", cn);

      cn.Open();
      cmd.ExecuteNonQuery();
      cn.Close();
}
Run Code Online (Sandbox Code Playgroud)

我是新手,我真的很困惑.

c# sql sql-server ado.net executenonquery

18
推荐指数
2
解决办法
11万
查看次数

c#:ExecuteNonQuery()返回-1

我之前使用过这种方法来返回更改的行数.我是运行insert方法,插入在存储过程中运行正常,但ExecuteNonQuery的返回值始终返回-1.

这是我的C#代码:

int ret = 0;

using (SqlConnection conn = new SqlConnection(this.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(QueryName, conn))
    {
        conn.Open();

        if (Params != null)
            cmd.Parameters.AddRange(Params);

        cmd.CommandType = CommandType.StoredProcedure;

        ret = cmd.ExecuteNonQuery();

        conn.Close();
    }
}

return ret;
Run Code Online (Sandbox Code Playgroud)

为什么我得到-1而不是更改的实际行数?

c# executenonquery

11
推荐指数
2
解决办法
3万
查看次数

使用Entity Framework更新语句

简单的问题,是否可以在更新一个实体时使用Entity Framework实现此查询?

update test set value = value + 1 where id = 10
Run Code Online (Sandbox Code Playgroud)

entity-framework executenonquery

7
推荐指数
2
解决办法
9820
查看次数

使用ExecuteNonQuery()时无法检测SQL错误

我有以下一些运行SQL语句的代码:

int rowsEffected = 0;
using (SqlConnection dbConnection = new SqlConnection(dbConnectionString))
{
    try
    {
        dbConnection.InfoMessage += new SqlInfoMessageEventHandler(dbConnection_InfoMessage);
        dbConnection.FireInfoMessageEventOnUserErrors = true;

        dbConnection.Open();


        SqlCommand command = dbConnection.CreateCommand();
        command.CommandTimeout = 0;
        command.CommandText = sqlStatement;

        rowsEffected = command.ExecuteNonQuery();
    }
    catch (Exception e)
    {
        // Handle exception
    }
}
Run Code Online (Sandbox Code Playgroud)

长时间运行的SQL语句可以通过使用具有适当严重性值的RAISERROR引发错误来报告SqlInfoMessageEventHandler的进度.

将FireInfoMessageEventOnUserErrors设置为true的原因是,如果没有这个,只有ExecuteNonQuery()返回时,才会立即处理来自SQL语句的所有消息.将此值设置为true,将在SQL语句引发进度消息时对其进行处理.

正如属性的名称所暗示的那样,事件处理程序还会触发错误,而不仅仅是针对SQL语句的进度反馈保留的特定严重性级别.

进度反馈的事件处理程序如下所示:

public void dbConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    if (e.Errors.Count > 0)
    {
        throw new Exception("Something bad happened");
    }

    // Report progress
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我可以检测到'e'中属性发生错误的时间,但抛出异常并没有做任何事情.我希望执行会落入catch块,但事实并非如此.

如何在ExcecuteNonQuery()方法之后确定发生错误?

TIA

c# sql executenonquery

6
推荐指数
1
解决办法
4144
查看次数

命令的Transaction属性尚未初始化

我正在尝试使用事务运行 ExecuteNonQuery,但我不断收到此错误

OleDbException:当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。命令的 Transaction 属性尚未初始化。

这是我的代码:有什么问题吗?

 _dataManager = new DataManager();

        bool bTrance = false;
        _dataManager.BuildConnectionString("server", "MyId", "MyPwd");
        _dataManager.Connect();

        try
        {
            Console.WriteLine("Begin Trans");
            var res = _dataManager.BeginTransaction();              
            if (res)
            {
                bTrance = true;
                Console.WriteLine(" Trans Success");
            }
            Console.WriteLine("Query Executed");
            return _dataManager.ExecuteQuery("call SP_MySp");

        }
        catch (OleDbException objDBExc)
        {
            Console.WriteLine("OleDbException : " + objDBExc.Message);
            if (bTrance)
            {

                _dataManager.RollbackTransaction();

            }

            return false;
        }
        catch (Exception objExc)
        {
            Console.WriteLine("OleDbException : " + objExc.Message);
            if (bTrance)
            {
                bTrance = false;
                _dataManager.RollbackTransaction();

            }

            return false;
        } …
Run Code Online (Sandbox Code Playgroud)

c# ado.net transactions executenonquery

6
推荐指数
1
解决办法
2万
查看次数

如何获取受ExecuteNonQuery影响的行数并忽略触发器行?

ExecuteNonQuery用来运行插入proc,它返回2,但实际上我只插入1条记录.由于触发,我得到1个额外的.无论如何我只得到实际受影响的行数.我不希望受触发器影响的行.

c# sql-server enterprise-library executenonquery c#-4.0

5
推荐指数
1
解决办法
1356
查看次数