Tag: tsql

SqlCommand.Prepare方法要求所有参数都具有显式设置类型

我在我的WCF Web服务中有以下代码片段,它根据提供的字典值的格式构建一组where条件。 public static Dictionary[] VehicleSearch(Dictionary searchParams, int maxResults) { string condition = “”; foreach (string key in searchParams.Keys) { //Split out the conditional in case multiple options have been set (ie SUB;OLDS;TOY) string[] parameters = searchParams[key].Split(‘;’); if (parameters.Length == 1) { //If a single condition (no choice list) check for wildcards and use a […]

存储过程需要一个我已经传入的参数

我试图使用此声明执行存储过程: ALTER PROCEDURE [dbo].[getByName] @firstName varchar, @lastName varchar AS … 我在C#中调用如下: public List GetPersonByName(string first, string last) { var people = new List(); var connString = ConfigurationManager.ConnectionStrings[“MyDbConnString”].ConnectionString; using (var conn = new SqlConnection(connString)) { using (var cmd = new SqlCommand(“dbo.getByName”,conn)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter(“@firstName”, SqlDbType.VarChar, 50)).Value = first; cmd.Parameters.Add(new SqlParameter(“@lastName”, SqlDbType.VarChar, 50)).Value = […]

将DataTable作为参数传递给存储过程

我有一个用C#创建的数据表。 DataTable dt = new DataTable(); dt.Columns.Add(“Name”, typeof(string)); dt.Columns.Add(“Age”, typeof(int)); dt.Rows.Add(“James”, 23); dt.Rows.Add(“Smith”, 40); dt.Rows.Add(“Paul”, 20); 我想将此传递给以下存储过程。 CREATE PROCEDURE SomeName(@data DATATABLE) AS BEGIN INSERT INTO SOMETABLE(Column2,Column3) VALUES(……); END 我的问题是:我们如何将这3个元组插入SQL表? 我们需要使用点运算符访问列值吗? 或者还有其他方法吗?

为什么en-dash( – )会触发非法的XML字符错误(C#/ SSMS)?

这不是关于如何克服“XML解析:…非法xml字符”错误的问题,而是关于它为什么会发生的问题? 我知道有修复( 1,2,3 ),但在选择最佳解决方案之前需要知道问题出在哪里(导致错误的原因是什么?)。 我们使用C#调用基于Java的Web服务。 从返回的强类型数据中,我们创建了一个将传递给SQL Server的XML文件。 Web服务数据使用UTF-8进行编码,因此在C#中我们创建文件,并在适当的地方指定UTF-8: var encodingType = Encoding.UTF8; // logic removed… var xdoc = new XDocument(); xdoc.Declaration = new XDeclaration(“1.0”, encodingType.WebName, “yes”); // logic removed… System.IO.File.WriteAllText(xmlFullPath, xdoc.Declaration.ToString() + xdoc.Document.ToString(), encodingType); 这将在磁盘上创建一个包含以下(缩写)数据的XML文件: 请注意,在第二条记录中, -与–不同。 我相信第二个实例是en-dash 。 如果我在Firefox / IE / VS2015中打开该XML文件。 它打开没有错误。 W3C XMLvalidation器也可以正常工作。 但是,SSMS 2012不喜欢它: declare @xml XML = ‘ ‘; […]

从select查询返回一个布尔值

我想选择布尔值: SELECT field1, field2, 1 as is_field FROM TABLE 在Visual Studio 2010中我正在做: bool b = row.Field(“is_field”); 但我得到了例外: 指定演员表无效。 如何将布尔值作为boolean而不是作为int ?

SqlDependency.Start(connectionString)每次返回false

我设置好了访问DataBase的权限 use DbName GRANT SUBSCRIBE QUERY NOTIFICATIONS TO dbuser use DbName GRANT SELECT ON OBJECT::schema.tableName TO dbuser Use DbName GRANT RECEIVE ON QueryNotificationErrorsQueue TO dbuser ALTER DATABASE DbName SET TRUSTWORTHY ON use DbName alter database DbName SET ENABLE_BROKER 但是当我启动SqlDependency时 : bool started = SqlDependency.Start(connectionString); // started是false然后我收到此错误 System.Data.dll中发生类型’System.InvalidOperationException’的exception但未在用户代码中处理附加信息:在不提供选项值的情况下使用SqlDependency时,必须在执行添加的命令之前调用SqlDependency.Start()到SqlDependency实例。 C#代码: private static bool notificationEnabled = false; private […]

在Visual Studio中查看LINQ执行的SQL的方法?

这个问题在这里已有答案: 查看linq-to-sql生成 3个答案 的sql 我想知道是否有办法在运行LINQ to SQL查询时查看在Visual Studio 2010 Ultimate中针对数据库执行的T-SQL。

SQLCLR和DateTime2

使用SQL Server 2008,Visual Studio 2005,.net 2.0 with SP2(支持新的SQL Server 2008数据类型)。 我正在尝试编写一个SQLCLR函数,它将DateTime2作为输入并返回另一个DateTime2。 例如: using System; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; namespace MyCompany.SQLCLR { public class DateTimeHelpCLR { [SqlFunction(DataAccess = DataAccessKind.None)] public static SqlDateTime UTCToLocalDT(SqlDateTime val) { if (val.IsNull) return SqlDateTime.Null; TimeZone tz = System.TimeZone.CurrentTimeZone; DateTime res = tz.ToLocalTime(val.Value); return new SqlDateTime(res); } } } 现在,上面的编译很好。 我希望这些SqlDateTimes映射到SQL Server的DateTime2,所以我尝试运行这个T-SQL: […]

存储过程中的多值日期参数?

我正在尝试使用一个存储过程来接受日期的多值参数。 这不是在SSRS中,但我试图使用与它相同的方法: ALTER PROCEDURE spSelectPlacementData ( @ClientID SMALLINT, @SourceFileDates VARCHAR(MAX) ) AS BEGIN SELECT (snip) FROM [APS].[dbo].[Account] A WHERE ClientID = @ClientID AND A.[SourceFileDate] IN (SELECT * FROM dbo.Split(@SourceFileDates)) END 我在SSRS报告多值参数上使用此方法和INT和VARCHAR字段。 这是我用来连接SourceFileDates的代码: string sourceFileDates = “”; foreach (DateTime file in job.sourceFiles) { if (file == job.sourceFiles.Last()) { sourceFileDates += “‘” + file.ToString(“d”) + “‘”; } […]

如何防止超出范围的日期时间值错误?

我正在从c#应用程序传递一个特殊的Insert语句到sql server 2000/2005。 有时,如果机器(安装了sql server)的日期时间格式与我传入的格式不同,则会抛出错误。 例如:在插入声明中,我传递的是“2010-03-10 00:00:00-05:00”,但机器区域日期设置不同。 我收到这个错误: – 将char数据类型转换为日期时间数据类型会导致超出范围的datetime值。 我可以在c#的Insert语句中传递一些通用日期格式,它与任何机器的区域日期时间设置完美配合。