标签: sqlparameter

SqlParameter已经包含在另一个SqlParameterCollection中,但是我没有看到

我有以下代码.

// Get total row count and build Pagination object
var countQuery = ArticleServerContext.Database.SqlQuery<int>("GetFullTextSearchCount @SearchTerm",
    new SqlParameter("@SearchTerm", fullTextQuery));
Pagination pagination = new Pagination(countQuery.Single(), page ?? 1);
// Get search results for current page
var resultsQuery = ArticleServerContext.Database.SqlQuery<ArticleSummary>("GetFullTextSearchResults @SearchTerm, @SkipRows, @TakeRows",
    new SqlParameter("@SearchTerm", fullTextQuery),
    new SqlParameter("@SkipRows", pagination.SkippedRows),
    new SqlParameter("@TakeRows", pagination.RowsPerPage));
// Build model
SearchResultsModel model = new SearchResultsModel
{
    SearchTerm = searchTerm.Trim(),
    Pagination = pagination,
    Results = resultsQuery.ToList()   // <=== Here's where the error happens
};
Run Code Online (Sandbox Code Playgroud)

当我尝试枚举时resultsQuery,我收到以下错误消息.

SqlParameter已包含在另一个SqlParameterCollection中.

这个错误消息似乎很清楚,但我无法看到我在哪里添加一个 …

c# linq ado.net sqlparameter

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

如何在ADO.NET中为表值函数调用传递default关键字

所以这是交易.在我们的数据库中,为了安全性和模块性,我们将大多数读取(即select语句)包含在表值函数中.所以我有一个定义一个或多个可选参数的TVF.

我认为拥有默认参数的TVF要求default在调用TVF时使用关键字,如下所示:

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)
Run Code Online (Sandbox Code Playgroud)

这很好,一切都在查询分析器中工作,但是当实际从ADO.NET发出这个请求时,我不知道如何创建一个实际将单词default放入渲染的sql 的sql参数.

我现在有类似的东西:

String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";

DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);

SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);
Run Code Online (Sandbox Code Playgroud)

所以,任何人都有任何想法如何传递default给TVF?

ado.net user-defined-functions sqlparameter

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

ASP.net用户数据在访问对象的用户之间进行交叉

这有点奇怪.我正在寻找关于如何提出正确问题的想法,因为我是一个真正的解决方案.

我有一个网站,我们的流量大幅增加.现在突然间我们得到左右sql参数错误.几个星期前我们切换到一个新的SQL服务器,一切都很好,但增加的流量似乎打破了我们.

我有一个数据访问类,每个用户尝试登录时调用.在最终更新用户上次登录日期并将其转发到管理部分之前,它会运行多个任务.

我从跟踪日志中看到的内容表明,当我登录时,前几个任务正在使用我的数据(比方说user = birk pass = word).但是在某些时候,访问者类开始从试图登录的其他人发送数据(比方说user = abcxyz)

当我们完成它时,我们对服务器的每个连接都会关闭.当我完成它们时,我将所有的访问器对象归零.但不知何故,来自不同会话的不同用户数据正在进入对象的其他人群实例.

我没有使用session/application/cache/viewstate来存储对象,所以我真的没看到他们如何编辑彼此...它真的很奇怪,我不知道如何研究这个问题.

这大致是访问者类......我修剪了一些不依赖于问题的部分

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Imports System.Text
Imports System.IO

Namespace ABC
    Public Class DataAccess
        Public Class SQL
            Dim objConnection As SqlConnection
            Dim objAdapter As SqlDataAdapter
            Dim objDataset As DataSet
            Dim objTable As DataTable
            Dim strSQL As String
            Dim strCommandType As String
            Shared sqlparams As List(Of param)
            Public params As New Parameters
            Shadows Application As HttpApplicationState = HttpContext.Current.Application
            Shadows Server As HttpServerUtility = HttpContext.Current.Server …
Run Code Online (Sandbox Code Playgroud)

vb.net asp.net multithreading object sqlparameter

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

为什么小数SqlParameter会被破坏?

我通过以下方式向sproc发送十进制值:

SqlParameter meh = new SqlParameter("Foo", SqlDbType.Decimal);
meh.Value = "0.00001";
meh.Precision = ((System.Byte)(12));
meh.Scale = ((System.Byte)(9));
Run Code Online (Sandbox Code Playgroud)

当我分析数据库以查看对其运行的内容时,我看到如下参数:

....,@Foo decimal(12,9),....,@Foo=10000,....
Run Code Online (Sandbox Code Playgroud)

它似乎从小数点完全镜像,我该如何解决这个问题?请注意,我还尝试将字符串首先转换为实际小数,并使用它来设置'meh.Value',但它仍然存在同样的问题.

更新

我注意到,如上例所示,原始值的小数点向右移动了9个位置,与刻度完全相同.什么会导致这个?

再次更新

我应该注意到我正在使用Sql Server 2008

.net sql decimal sqlparameter

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

有没有办法确定存储过程中的参数是否在代码中具有默认值(因此不是必需的) - .Net?

我已经从这样发送的存储过程中拉出参数:

 foreach (SqlParameter param in cmd.Parameters)
            {
               if ((param.Direction == ParameterDirection.Input) || (param.Direction == ParameterDirection.InputOutput))
                {
                    jsonReturn += "{\"paramName\":\"" + param.ParameterName + "\", \"paramType\":\"" + param.SqlDbType.ToString() + "\"},";
                }
            }
Run Code Online (Sandbox Code Playgroud)

我查看了SqlParameter对象,无法找到一种方法来查看它是否可以告诉我参数是否具有默认值...(虽然我的调试器表现得很奇怪,所以谁知道).

我正在做的是为用户构建一种Stored Proc帮助器.我现在告诉他们所有属于他们选择的存储过程的参数......我真的想知道它们是否是必需的.

c# sql-server stored-procedures sqlparameter

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

从OleDbCommand返回值

sqlQuery = "SELECT [ID] from [users] WHERE CallerName=@CallerName";

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
cmd = new OleDbCommand(sqlQuery, conn);
cmd.CommandText = sqlQuery;
cmd.Parameters.Add("@CallerName", OleDbType.VarChar).Value = labelProblemDate.Text.Trim();
cmd.Parameters["@CallerName"].Value = name;
cmd.ExecuteNonQuery();          
conn.Close();
Run Code Online (Sandbox Code Playgroud)

我被告知这是如何使用参数从SELECT查询中读取数据,但它不起作用.我想我做错了什么.

我正在使用WinForms和Microsoft Access 2007

c# sql oledb parameters sqlparameter

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

如何使用SqlParameter.Offset属性和ADO.NET在SQL Server 2012中存储二进制文件

我目前正在学习如何在SQL Server中不使用varchar(max)上的FILESTREAM属性来存储文件,因为我不需要存储非常大的二进制文件.尽管我想通过它的小块存储二进制数据.我发现的是SqlParameter.Offset属性.以下是来自MSDN的一些信息:

"Offset属性用于二进制和字符串数据的客户端分块.例如,为了将10MB的文本插入服务器上的列,用户可能会执行10个参数化的1MB块插入,移动Offset的值每次迭代1MB."

听起来这正是我所需要的,但我对如何使用它感到困惑.我创建了一个非常简单的表,名为BinaryFilesTable(Id,FileData).Id是主键,FileData是varbinary(max).到目前为止,这是我的代码.

public static void Main(string[] args)
    {
        var fileBytes = File.ReadAllBytes("../../image.jpg");

        const string connectionString = @"Server=.; Database=TestDb; Integrated Security=true";
        SqlConnection connection = new SqlConnection(connectionString);

        connection.Open();
        using (connection)
        {
            string commandText = "INSERT INTO BinaryFilesTable(FileData) VALUES (@binaryFileData)";

            SqlCommand command = new SqlCommand(commandText, connection);

            SqlParameter commandParameter = new SqlParameter();
            commandParameter.ParameterName = "@binaryFileData";
            commandParameter.Value = fileBytes;
            commandParameter.SqlDbType = SqlDbType.VarBinary;
            commandParameter.Size = -1; // VarBinary becomes VarBinary(max) if size is set to -1.
            //commandParameter.Offset = ??? How to use it ??? …
Run Code Online (Sandbox Code Playgroud)

c# ado.net offset sqlparameter sql-server-2012

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

SqlParameter 如何知道类型

我想SqlParameter知道未指定时如何知道类型?

例如,在实例化参数对象时,您不需要指定 DB 类型。以某种方式执行命令时,.net 会为您处理此问题。在幕后是否有某种转换正在发生?当你做/不明确指定类型时是否有成本?

.net ado.net sqlparameter

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

sql server和c#中的输出参数问题

为什么如果我使用输出参数创建此存储过程,我收到以下错误:

sp_DTS_InsertLSRBatch需要未提供的参数@ErrorMsg

存储过程代码:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[sp_DTS_InsertLSRBatch]  
    @LSRNbr varchar(10),
    @BatchNbr varchar(10),
    @ErrorMsg varchar(20) output
AS
BEGIN   
    SET NOCOUNT ON;    

    if not exists(select *
                from tblDTS_LSRBatch (nolock) 
                where LSRNbr=@LSRNbr and BatchNbr=@BatchNbr)
    begin   
        -- check if BatchNbr exists under another LSR
        -- if not add (LSR, BatchNbr) else error

        if not exists(select *
                from tblDTS_LSRBatch (nolock) 
                where BatchNbr=@BatchNbr)   

            insert into tblDTS_LSRBatch (LSRNbr,BatchNbr) values (@LSRNbr, @BatchNbr)       
        else    
            set @ErrorMsg = 'Batch dif LSR'     
    end
END
Run Code Online (Sandbox Code Playgroud)

C#代码:

SqlConnection …
Run Code Online (Sandbox Code Playgroud)

c# sql sqlparameter

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

如何通过 Dapper 使用 Oracle 的整数参数列表?

我正在尝试重新编写一些代码以使用 Dapper,以便我可以轻松使用参数。我正在尝试在 Oracle 数据库上执行 UPDATE 语句。要更新的列表IDs作为参数传入List<int>。我想为每个IDs传入的字段更新一个字段。以下是我所拥有的:

OracleConnection connection = ... // set earlier

public int IncreaseProcessCount(List<int> ids)
{
    var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN @ids", new { ids });
    return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)

在使用 Dapper 之前,执行语句运行得很好。现在我收到以下错误:

ORA-00936: 缺少表达式。

我当前的解决方案基于以下帖子:

带有参数列表的 Dapper 查询以及 使用 Dapper 执行插入和更新

c# sql oracle sqlparameter dapper

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