相关疑难解决方法(0)

使用返回值调用存储过程

我试图从我的C#windows应用程序调用存储过程.存储过程在SQL Server 2008的本地实例上运行.我能够调用存储过程但我无法从存储过程中检索该值.该存储过程应该返回序列中的下一个数字.我在网上做过研究,我见过的所有网站都指出这个解决方案有效.

存储过程代码:

ALTER procedure [dbo].[usp_GetNewSeqVal]
      @SeqName nvarchar(255)
as
begin
      declare @NewSeqVal int
      set NOCOUNT ON
      update AllSequences
      set @NewSeqVal = CurrVal = CurrVal+Incr
      where SeqName = @SeqName

      if @@rowcount = 0 begin
print 'Sequence does not exist'
            return
      end

      return @NewSeqVal
end
Run Code Online (Sandbox Code Playgroud)

调用存储过程的代码:

SqlConnection conn = new SqlConnection(getConnectionString());
conn.Open();

SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter param = new SqlParameter();

param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar);
param.Direction = ParameterDirection.Input;
param.Value = "SeqName";

SqlDataReader reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我也尝试使用a …

c# sql-server ado.net stored-procedures return-value

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

返回标识值时,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影响的行数并忽略触发器行?

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

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

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

插入后如何获取新行的GUID值?

我想在Sqlserver中获取新插入记录的Id.我已经检查了Scope_Identity()但据说这会返回自动增量列的值.我用于Id的专栏是Guid.插入后我想要这个Guid列值.应该如何实现?或者我必须编写一个自定义繁琐的函数来获取新插入记录的Id.

c# sql sql-server asp.net

4
推荐指数
1
解决办法
2188
查看次数

使用asp.net指定的强制转换无效错误?

这是尝试执行我的网站后出现的错误.这与我之前的问题有关,但这一次有不同的目标.如果您想参考它,这是链接.如何编写嵌套的sql语句来获取mssql中特定项的行号?

下面是服务器错误的图像. 在此输入图像描述

它指的是Int32 count =(Int32)cmd.ExecuteScalar(); 我在我的代码中写的.这是完整的代码.我还添加了一个注释错误发生的位置.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
SqlConnection con, con1;
SqlCommand cmd, cmd1;
DataSet ds, ds1;
private int _x;
public int X
{
    get { return _x; }
    set { _x = value; }
}
public _Default()
{
    con = new SqlConnection();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["GuitarItemsDBConnectionString2"].ToString();
    cmd = new SqlCommand();
    ds = new DataSet();
}
protected …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net

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

为什么执行这个简单查询的方法会给我一个错误的结果?

我有以下问题.

我有这个Microsoft SQL Server查询:

Select AVG(Severity) AS 'Average Severity' from VulnerabilityAlertDocument
Run Code Online (Sandbox Code Playgroud)

执行到Microsoft SQL Server Managment Studio,返回给我这个浮点数:7,34792844929602

现在我正在尝试创建一个简单实现此查询并返回获取值的C#方法,所以我做了类似这样的事情:

    public double getVulnerabilitySeverityAverage()
    {
        double vulnerabilitySeverityAverage;

        _strSQL = "Select AVG(Severity) AS 'Average Severity' from VulnerabilityAlertDocument";

        System.Data.Common.DbCommand command;
        command = _connection.CreateCommand();
        command.CommandText = _strSQL;

        vulnerabilitySeverityAverage = command.ExecuteNonQuery();

        return vulnerabilitySeverityAverage;
    }
Run Code Online (Sandbox Code Playgroud)

问题是,当执行前面的方法时,漏洞范围内的结果值不是预期值(7,34792844929602),但它是错误的值:-1.0

为什么?这有什么不对?我错过了什么?

TNX

.net c# sql-server asp.net

-1
推荐指数
1
解决办法
75
查看次数