相关疑难解决方法(0)

将参数传递给SQLCommand的最佳方法是什么?

将参数传递给SQLCommand的最佳方法是什么?你可以做:

cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";
Run Code Online (Sandbox Code Playgroud)

要么

cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";
Run Code Online (Sandbox Code Playgroud)

要么

cmd.Parameters.Add("@Name").Value = "Bob";
Run Code Online (Sandbox Code Playgroud)

看起来第一个可能在某种程度上"更好",无论是性能方面还是错误检查方式.但我想更清楚地知道.

.net sql-server ado.net sqlcommand

54
推荐指数
4
解决办法
7万
查看次数

如何在C#中创建NVarchar(max)Sql参数?

我有以下代码使用存储过程拉回DataTable并输入字符串参数@JobNumbers,这是动态创建的作业编号字符串(因此长度未知):

using (SqlConnection connection = new SqlConnection(con))
        {
            SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
            cmd.Parameters["@JobNumbers"].Value = JobNumber;

            SqlDataAdapter da = new SqlDataAdapter(cmd);

            connection.Open();
            da.Fill(JobDetails);
        }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我当前将JobNumber参数设置为4000的长度,这应该足以承担大约500个作业号并且应该足够了.但是,有可能在奇怪的场合需要更多.所以,我想知道,有没有办法将参数设置为nvarchar(max)的等效sql参数类型?

我已经看过各种类似的问题(将参数传递给SQLCommand的最佳方法是什么?)但没有具体说明你是否可以(或不能)这样做.其次,如果我将存储过程中的@JobNumber参数设置为nvarchar(max),甚至需要这样做,因此我可能根本不需要在C#中设置长度?如果我这样做,这将有潜在的性能问题,如此问题中所建议的在添加SqlCommand参数时何时应该使用"SqlDbType"和"size"??

c# sql nvarchar sqlparameter

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

SqlDbType.Structured是什么意思?

从msdn 网站我得到以下内容:

一种特殊数据类型,用于指定表值参数中包含的结构化数据.

似乎我的代码使用它而没有它(使用存储过程将表推送到DB).

有人可以解释它做了什么 - 我从定义中不理解它.

c# sqlcommand sqldbtype sqlparameter

8
推荐指数
1
解决办法
7412
查看次数

为什么`nvarchar`参数比'text'`SqlCommand`命令的其他类型更快?

概观

这个问题是这个问题的一个更具体的版本:

但我注意到其他数据类型的性能相同(事实上,在我的情况下,我根本没有使用任何bigint类型).

以下是一些其他问题似乎应该涵盖这个问题的答案,但我观察的是他们所指出的相反的问题:

上下文

我有一些C#代码用于将数据插入表中.代码本身是数据驱动的,因为一些其他数据指定了应该插入数据的目标表.所以,我可以在存储过程中使用动态SQL,我选择在我的C#应用​​程序中生成动态SQL.

对于第I行插入,命令文本始终相同,因此在插入任何行之前,我会生成一次.命令文本的格式如下:

INSERT SomeSchema.TargetTable ( Column1, Column2, Column3, ... )
VALUES ( SomeConstant, @p0, @p1, ... );
Run Code Online (Sandbox Code Playgroud)

对于每个插入,我创建一个SqlParameter对象数组.

对于' nvarchar'行为,我只是使用SqlParameter(string parameterName, object value)构造函数方法,而不是显式设置任何其他属性.

对于"简并的行为,我所用的SqlParameter(string parameterName, SqlDbType dbType)构造方法,并且还设定Size,Precision和Scale特性适当.

对于这两个版本的代码,传递给构造函数方法或单独分配给Value属性的值的类型为object.

' nvarchar'版本的代码大约需要1-1.5分钟."退化"或"特定类型"代码需要超过9分钟; 所以慢了6-9倍.

SQL Server Profiler没有透露任何明显的罪魁祸首.特定于类型的代码生成看起来更好的SQL,即动态SQL命令,其参数包含适当的数据类型和类型信息.

假设

我怀疑,因为我传递了一个object类型值作为参数值,ADO.NET …

c# sql-server

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

将Guid值插入Sql Server(UniqueIdentifier列)时出错。(内部说明)

我的数据库中有一个表,其中2列的uniqueidentifier不是null类型。我正在尝试从asp.net c#在该表上插入一行,如下所示:

sqlCmd.CommandText = string.Format("Insert Into Member(MemberNo,MemberEmpId,...) values({0},{1},... )", MemNo, MemEmpNo, ...);
Run Code Online (Sandbox Code Playgroud)

它引发了以下异常,

“浮点值'24e46222'超出计算机表示范围(8个字节)。'a8c'附近的语法不正确。浮点值'6664e7925'超出计算机表示范围(8字节)。”

我用谷歌搜索了这个错误,并得到了参考,我尝试了一下,但是仍然给出了同样的错误。有人可以帮我解决这个问题。除了这个,我什么也找不到。

提前致谢!

c# asp.net sql-server-2008

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

C#错误:输入字符串的格式不正确

我收到此错误:“输入字符串的格式不正确。”

这是我的代码:

    private void UpdatePOdetailBalance(int Qty)
    {
        int newbal;

        SqlCommand com = new SqlCommand();

        com.Connection = cn;

        newbal = Convert.ToInt16(txtQtyOrdered.Text) - Qty;
        com.CommandText =
            "UPDATE PODetail SET BalanceQty="+ newbal +" WHERE OrderID=" +
             Convert.ToInt16(txtPONumber.Text) + "AND ItemID=" +
             Convert.ToInt16(txtItemNo.Text);


        com.ExecuteNonQuery();

    }

    private void btnOK_Click(object sender, EventArgs e)
    {

            UpdatePOdetailBalance(Convert.ToInt16(txtQuantity.Text));

    }
Run Code Online (Sandbox Code Playgroud)

我想计算等于txtQtyOrdered减去数量的newbal,但我收到此错误,请为此提供帮助。谢谢。

c# sql format visual-studio

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