为单个ADO.Net SqlClient参数分配多个值
我希望运行类似于此 的SQL选择语句 SELECT * FROM CatalogueItems WHERE id IN (1,10,15,20); 使用ado.net sqlclient样式@name参数.我尝试使用存储的SQL字符串 SELECT * FROM CatalogueItems WHERE id IN (@Ids) ,然后在我的C#代码 中 SqliteCommand command; //... //returns 0 results command.Parameters.Add("@Ids", null).Value = "1,10,15,20"; //returns 0 results command.Parameters.Add("@Ids", DbType.String).Value = "1,10,15,20"; //returns 1 or more results command.Parameters.Add("@Ids", nul
12 2024-01-19
编程技术问答社区
从参数 - 使用观点来看,从ADO.NET调用表值函数与存储过程相同或与参数查询相同?
本文警告使用参数性查询而不是存储过程的性能陷阱.基本思想是服务器必须猜测参数的数据类型及其猜测污染了缓存.我的困惑来自文章,仅提及存储程序作为解决方案.据我所知,用户定义的表值功能与存储过程一样强烈地键入,因此服务器不必猜测使用它们时必须猜测.但是,我也知道ado.net只有用于存储过程的特殊ComamndType ,所以我不知道它是如何知道它正在与用户定义的表值函数交谈而不是传递RAW SQL. 我的问题是:鉴于我无法告诉Ado.net,我要称呼它是用户定义的表值函数,而不是存储过程,我有可能会处理我的风险致电用户定义的表值函数作为参数性查询,因此面临性能问题?还是Ado.net足够聪明,可以知道用户定义的表值函数具有明显的参数? 解决方案 不,它们不一样. 两者都将其参数强制为各种类型,因此没有可害羞的查询问题,但针对TVF的临时批次仍然获得了新的查询计划,因此您拥有重新编译的开销. 据我所知,用户定义的表值功能与存储过程一样强烈地键入,因此服务器不必猜测使
0 2024-01-19
编程技术问答社区
InsertCommand.Parameters.Add size parameter for datetime
我需要使用以下语法知道DateTime值的大小参数应该是什么: adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime"); i 不能使用以下语法,因为我正在批量数据列表中的更新. adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime); adapter.InsertCommand.Parameters["@deliveryDateAndTime"] = *variable*.value; 以下是我需要使用的代码(为了清楚起见,缩写).请注意,在adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"de
0 2024-01-19
编程技术问答社区
使用sqlparameter的性能不佳
我有一个Web服务,因此处理程序被多次同时称为. 内部i创建SQLConnection和SQLCommand.我必须执行大约7个不同的命令.不同的命令需要各种参数,所以我只添加一次: command.Parameters.Add(new SqlParameter("@UserID", userID)); command.Parameters.Add(new SqlParameter("@AppID", appID)); command.Parameters.Add(new SqlParameter("@SID", SIDInt)); command.Parameters.Add(new SqlParameter("@Day", timestamp.Date)); command.Parameters.Add(new SqlParameter("@TS", timestamp)); 然后在执行过程中,我只是更改commandText prorerty,然后致电execute
0 2024-01-19
编程技术问答社区
为什么SqlParameter的名称/值构造器将0视为空?
我在一段代码中观察到一个奇怪的问题,即即使其参数匹配数据源中的记录,Adhoc SQL查询也没有产生预期输出.我决定将以下测试表达式输入到直接的窗口中: new SqlParameter("Test", 0).Value 这给出了null的结果,这让我挠头.看来SqlParameter构造函数将零视为零.以下代码产生正确的结果: SqlParameter testParam = new SqlParameter(); testParam.ParameterName = "Test"; testParam.Value = 0; // subsequent inspection shows that the Value property is still 0 有人可以解释这种行为吗?是故意的吗?如果是这样,它可能相当危险... 解决方案 如文档对于该构建体: 当您在值参数中指定对象时,从Microsoft .NET .NET框架类型中推断出SQLDBTYPE
0 2024-01-19
编程技术问答社区
WHERE IN (IDs数组)
我有通过一系列ints的Web服务. 我想按以下方式进行选择的说明,但要继续遇到错误.我需要将数组更改为字符串吗? [WebMethod] public MiniEvent[] getAdminEvents(int buildingID, DateTime startDate) { command.CommandText = @"SELECT id, startDateTime, endDateTime From tb_bookings WHERE buildingID IN (@buildingIDs) AND startDateTime
2 2024-01-19
编程技术问答社区
默认值设置为0的SqlParameter不能按预期工作
我在做这样的事情: SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Getting NullReferenceException here } 但是,当我这样说时,我停止了例外: SqlParameter param = new SqlParameter("@Param", SqlDbType.Int) { Value = 0 }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Everything OK } 谁能告诉我为什么sqlpar
2 2024-01-07
编程技术问答社区
Sql参数化更新命令的语法错误 - c#
这是我在C#中的第一个SQL参数化命令,当我登记更新时,我有一个语法错误. 这是我的代码: string maRequete = "UPDATE " + strNomTable + " set " + "evetype = @evetype ," + "evedes = @evedes ," + "evecli = @evecli ," + "eveusermo = @eveusermo ," + "eveinterv = @eveinterv where eveNum = " + '"' + strEvtNumeroString.ToString() + '"'; OleDbCommand DbCommand = new OleDbCommand(maRequete); DbCommand.Parameters.Add("@evetype", OleDbType.VarChar); DbComm
2 2024-01-07
编程技术问答社区
必须声明标量变量"@Login"。在尝试向SqlDataSource添加参数时出错
我有一个错误: 必须声明标量变量" @login". 我的代码: using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) { SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); SqlParameter param = new SqlParameter(); param.Param
2 2024-01-06
编程技术问答社区
SqlCommand如何对参数进行消毒?
使用SqlParameters是一种推荐的方法,可以防止数据库查询中的SQL注入.我在哪里可以找到内部清理这些参数的代码/函数?我想在我的自定义实现中重复使用此功能.我试图使用反射器找到它,但没有成功. 解决方案 它可以防止SQL注入,而不是XSS,没有代码或功能可以消毒参数数据. 通过将参数值与查询字符串分开传输到服务器,从而实现了保护,以便将值直接替换为SQL语句. . 因此,而不是运行类似的SQL Server: SELECT * FROM [table] WHERE [column] = ParameterValue 更像是这样的东西: DECLARE @ParamValue int -- //@ParamValue variable is populated from the framework in a safe way SELECT * FROM [table] WHERE [column] = @ParamValue 这比必须
0 2024-01-04
编程技术问答社区
如何在SQL Server 2008中从C#向存储过程传递XML?
我想将XML文档传递到SQL Server存储的过程中: CREATE PROCEDURE BookDetails_Insert (@xml xml) 我想将某些字段数据与其他表数据进行比较,并且是否匹配记录必须插入表中. 要求: 如何将XML传递给存储过程?我尝试了这个,但它不起作用: [工作] command.Parameters.Add( new SqlParameter("@xml", SqlDbType.Xml) { Value = new SqlXml(new XmlTextReader(xmlToSave.InnerXml, XmlNodeType.Document, null)) }); 如何在存储过程中访问XML数据? 编辑: [工作] String sql = "BookDetails_Insert"; XmlDo
20 2023-12-20
编程技术问答社区
SqlParameter和ExecuteNonQuery导致不可重复的超时现象
我最近继承了一些偶尔存在超时问题的代码.我大多熟悉ORM,因此我在确定此代码中是否有任何问题时遇到困难.当它没有时间时,它可以在几秒钟内工作.超时大约需要一分钟. 这是代码: Dim sql As String = "UPDATE VendorInfo SET " & _ "AbsInkUpdateStatus=@AbsInkUpdateStatus, AccountingNotes=@AccountingNotes, " & _ "AccountNumber=@AccountNumber, Address_Ship=@Address_Ship, " & _ "Address0=@Address0, Address1=@Address1, Address2=@Address2, ArtEmail=@ArtEmail, " & _ "ArtRequirements=@ArtRequireme
2 2023-11-15
编程技术问答社区
VB.Net中的sqlParameters数组
我正在尝试在vb.net中创建一个类型大小的参数数组: Dim parameters() As SqlParameter = New SqlParameter() _ { New SqlParameter("@first_name", SqlDbType.VarChar, 50) {Value = "john"}, New SqlParameter("@last_name", SqlDbType.VarChar, 50) {Value = "doe"}, New SqlParameter("@age", SqlDbType.Int) {Value = 18}, New SqlParameter("@id", SqlDbType.Int) {Value = 123} } ,但vs说:没有声明价值.由于其保护级别,它可能无法访问 上面的代码有什么问题? 谢谢!
0 2023-11-14
编程技术问答社区
如何在整数数据类型的变量中把sql参数传成空值?
如何将SQL参数作为null值传递到整数数据类型变量? StockBO sBO = new StockBO(); sBO.Mode = 2; if (ddcmpanyname.SelectedIndex != 0) { sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue); } else { sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types. sBO.Client_id =DBNull.Value;//Cannot implicitly convert type } d
6 2023-10-30
编程技术问答社区
如何在存储过程中对动态SQL语句进行后期参数绑定?
我试图基于现场映射表和某些业务规则动态构建T-SQL语句. 缩短了长话短说,我的功能将返回SQL语句为varchar(max),我将在我存储的过程中执行为EXEC (@Sql). 允许我用测试表演示 create procedure [dbo].[sp_TestInsert] ( @Id int, @Name varchar(20), @Surname varchar(20), @Age int, @Source varchar(1) ) as declare @sql varchar(max) -- Return SQL statement that depends on business rules -- i.e. if the @Source = 'i' the returned SQL will be: -- "update TestTable set Name = @Name, Surna
8 2023-10-27
编程技术问答社区
我怎样才能在存储过程中循环浏览一个表?
这个问题从这个. 我有两张表需要查询并收集一些计算的总和;我需要一个基于单元的结果集 - 每个单元的一行,并将其计算出的数据折叠到该行中. 这两个表包含以下相关成员: customerCategorylog : Unit varchar(25) MemberNo varchar(10) Category varchar(50) Subcategory varchar(50) BeginDate Datetime EndDate Datetime 报告monthlysales : Unit (VarChar) MemberNo (VarChar) MonthlySales (Money) CYear (Int) Cmonth (Int) 对于每个单元(两个表中都有许多行,每个成员都有一个,但在结果集中包含一个行),我需要填充四列:新,假设,现有和有机的.这些值是基于属于相应"子类别"字段的单元的所有成员的总和. c
10 2023-10-27
编程技术问答社区
SqlParameter的正确语法
我正在尝试转换: command.Parameters.Add (new SqliteParameter (DbType.Int32) { Value = id }); 到正常的SQLParameter: command.Parameters.Add(new SqlParameter(DbType.Int32) { Value = id }); 除了这一条外,我现在设法转换了每一行,我得到了这些错误: Error 3 Argument 1: cannot convert from 'System.Data.DbType' to 'object[]' Error 2 The best overloaded method match for 'System.Data.SqlClient.SqlParameter.SqlParameter(object[])' has some invalid arguments 完整功能代码: public
4 2023-10-13
编程技术问答社区
如何在存储过程中调用存储过程(带2个参数)?
我已经存储了具有相同参数的过程(服务器名称和日期).我想编写一个存储过程并在该sp中执行它们(称为sp_all). CREATE PROCEDURE [dbo].[SP_All] AS BEGIN exec sp_1 @myDate datetime, @ServerName sysname exec sp_2 @myDate datetime, @ServerName sysname exec sp_3 @myDate datetime, @ServerName sysname exec sp_4 @myDate datetime, @ServerName sysname END Go 错误:必须声明标量变量" @mydate". 解决方案 我在这里看到两个问题: 您的过程显然采用两个参数@myDate和@ServerName,您尚未声明.通过添加名称和过程名称和AS. 之间的类型来做到这一点. 将SP_1调用SP_4时,无需再次指定参数的
18 2023-09-30
编程技术问答社区
有什么方法可以确定存储过程中的一个参数在code-.Net中是否有默认值(因此不需要)?
我已经从以下发送的存储proc中提取参数: foreach (SqlParameter param in cmd.Parameters) { if ((param.Direction == ParameterDirection.Input) || (param.Direction == ParameterDirection.InputOutput)) { jsonReturn += "{\"paramName\":\"" + param.ParameterName + "\", \"paramType\":\"" + param.SqlDbType.ToString() + "\"},"; } } 我研究了sqlparameter对象,找不到一种方法来看看它是否可以告诉我该参数是否具有默认值...
10 2023-09-30
编程技术问答社区
SqlParameter不允许表名-其他选项没有sql注入攻击?
我有一个运行时错误,说"Must declare the table variable "@parmTableName".意味着不允许将表名称为SQL-Statement中的SQL参数. 有比允许SQL注入攻击更好的选择或建议吗?我不想为sql语句" DELETE FROM " + tableName + " "; 做这个c#脚本 using(var dbCommand = dbConnection.CreateCommand()) { sqlAsk = ""; sqlAsk += " DELETE FROM @parmTableName "; sqlAsk += " WHERE ImportedFlag = 'F' "; dbCommand.Parameters.Clear(); dbCommand.Parameters.AddWithValue("@parmTableName", tableName); dbConnection.Op
4 2023-09-25
编程技术问答社区