我试图从我的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 …
试图弄清楚它是否最好使用,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)
这对我需要的东西很好,所以我很想知道
ExecuteNonQuery …我ExecuteNonQuery用来运行插入proc,它返回2,但实际上我只插入1条记录.由于触发,我得到1个额外的.无论如何我只得到实际受影响的行数.我不希望受触发器影响的行.
我想在Sqlserver中获取新插入记录的Id.我已经检查了Scope_Identity()但据说这会返回自动增量列的值.我用于Id的专栏是Guid.插入后我想要这个Guid列值.应该如何实现?或者我必须编写一个自定义繁琐的函数来获取新插入记录的Id.
这是尝试执行我的网站后出现的错误.这与我之前的问题有关,但这一次有不同的目标.如果您想参考它,这是链接.如何编写嵌套的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) 我有以下问题.
我有这个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