标签: executescalar

返回标识值时,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万
查看次数

无法隐式转换类型'int?' 'int'.

我收到错误"无法隐式转换类型'int?' 到'int'.在返回行的OrdersPerHour上存在显式转换(你是否错过了演员?)我不确定为什么,因为我的C#技能不是那么先进.任何帮助,将不胜感激.

static int OrdersPerHour(string User)
{
    int? OrdersPerHour;
    OleDbConnection conn = new OleDbConnection(strAccessConn);
    DateTime curTime = DateTime.Now;        

    try
    {
        string query = "SELECT COUNT(ControlNumber) FROM Log WHERE DateChanged > #" + curTime.AddHours(-1) + "# AND User = '" + User + "' AND Log.EndStatus in ('Needs Review', 'Check Search', 'Vision Delivery', 'CA Review', '1TSI To Be Delivered');";
        OleDbCommand dbcommand = new OleDbCommand(query, conn);
        dbcommand.Connection.Open();
        dbcommand.CommandType = CommandType.Text;
        OrdersPerHour = (int?)dbcommand.ExecuteScalar();

        Console.WriteLine("Orders per hour for " + User + " …
Run Code Online (Sandbox Code Playgroud)

c# executescalar

18
推荐指数
3
解决办法
9万
查看次数

Int32.TryParse()或(int?)command.ExecuteScalar()

我有一个SQL查询,它只返回一个字段 - 一个INT类型的ID.

我必须在C#代码中将其用作整数.

哪种方式更快,占用内存更少?

int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
  // use id
}
Run Code Online (Sandbox Code Playgroud)

要么

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}
Run Code Online (Sandbox Code Playgroud)

要么

int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
  // use id.Value
}
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net tryparse executescalar

17
推荐指数
3
解决办法
4万
查看次数

什么是"标量"查询?

我正在使用LLBLGEN,其中有一个方法来执行查询scalar query.谷歌搜索给了我一个定义scalar sub-query,它们是一样的吗?

sql database executescalar llblgen

14
推荐指数
3
解决办法
1万
查看次数

ExecuteScalar返回null或DBNull(开发或生产服务器)

我正在尝试向DataRowC#中的现有列添加列.之后,该列将填充我的数据库中的单个值.

DataRow dr已存在且列"COLNAME"也存在.
comTBP是我的SqlCommand.

dr["COLNAME"] = Convert.ToInt32(comTBP.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)

如果我的数据库中有值,并且ExecuteScalar()可以获得该值,则一切正常.如果我在我的开发服务器(本地)上测试此代码,如果ExecuteScalar()返回null或DBNull并且我的新列的值为0,它也可以工作.但是如果我将代码部署到生产服务器,则会出现问题.如果我做同样的事情,使用相同的数据库,它会抛出一个异常,并显示一条消息,它无法将DBNull转换为Int32.
我的问题是为什么这个错误出现在生产服务器上而不是我的本地开发服务器上?

c# dbnull asp.net-development-serv executescalar

10
推荐指数
2
解决办法
4万
查看次数

ExecuteScalar()返回null,尽管数据已添加到DB

我有一个代码如下所示,我尝试将数据插入表中并返回新元素的ID(由自动增量给出).

int newEquipmentID = new int();

query = database.ParameterizedQueryString("INSERT INTO Equipment (EquipmentTypeID) VALUES ({0})", "equipmenttypeID");

newEquipmentID = (int)database.Connection.ExecuteScalar(query, DefaultTimeout, equipment.EquipmentTypeID);
Run Code Online (Sandbox Code Playgroud)

但它失败并返回null,就好像尚未添加新项目一样.但实际上我可以看到新项目在数据库中进行简单的咨询.

我的问题是"何时"将数据实际添加到数据库中,如何获取新添加项目的ID.谢谢!

c# sql t-sql ado.net executescalar

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

在Oracle中的一个ExecuteScalar中运行多个命令

我有一批sql语句,如...

插入.... ; 插入.... ; 删除.........;

等等

当我尝试对oracle执行它们时它给了我这个错误(ORA-00911无效字符)

现在我可以理解这是因为语句之间的分号,我在SQL Server上尝试了这个并且它起作用但是在Oracle中没有运气到目前为止.

有没有办法使用ExecuteScalar或其他一些函数对oracle运行多个语句?


DUPLICATE:如何使用.NET执行多个Oracle SQL语句

sql oracle executescalar ora-00911

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

当sproc使用RETURN @value时,你可以使用cmd.ExecuteScalar吗?

你能用吗?

int blah = Convert.ToInt32(cmd.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)

当sproc的最后一个语句执行时:

RETURN @value
Run Code Online (Sandbox Code Playgroud)

我只能这样做才能发挥作用:

SELECT @value

此外,这给了我一个对象null异常:

int blah = (int)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

是不是convert.toint32和(int)相同的东西,但一个是另一个的包装?

c# ado.net executescalar

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

如何创建数组DbParameter []

手册说应该使用ExecuteScalar方法,如:

public T ExecuteScalar<T>( 
   string commandText,
   CommandType commandType,
   params DbParameter[] parameters
)
Run Code Online (Sandbox Code Playgroud)

但是如何创建参数数组呢?我需要提供我的存储过程2个参数.

c# sql executescalar

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

在SELECT之后,ExecuteScalar会立即返回吗?

最近我注意到有趣的行为.

当使用SqlCommand.ExecuteScalar()运行MS SQL存储过程时,我的应用程序似乎完全不知道在SELECT完成后出现的任何SQL错误或PRINT .

最可能的解释是,在任何SELECT结果出现后立即向C#提供流控制,而不等待存储过程完成(尽管存储过程继续在下面静默执行).

显而易见的优势是性能提升(无需等待,因为结果已经知道),遗憾的是C#app并不知道在此之后可能发生的任何SQL异常.

有谁可以证实我的解释?这种行为会被改变吗?

.net c# sql-server executescalar

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