Tag: sqlcommand

通过C#SqlCommand执行合并语句不起作用

我正在尝试使用临时表和MERGE语句通过C#中的SqlCommand对象更新SQL表。 我正在处理的程序旨在首先将一组非常大的记录(超过20k +)导出到Excel电子表格中。 然后,用户能够搜索并替换特定值,并在他们喜欢的记录中更新尽可能多的字段。 我正在尝试的是获取该电子表格,使用它填充DataTable ,然后使用SqlBulkCopy使用DataTable填充临时SQL表。 然后,如果行仍存在于数据库中,则使用MERGE语句更新行。 但是,我遇到的问题是我在ZipCodeTerritory表上的唯一约束一直被触发给我以下错误消息: 无法在对象’dbo.ZipCodeTerritory’中插入具有唯一索引’UQ_ChannelStateEndDateZipCodeISNULL’的重复键行。 重复键值为(9,CA,94351,9999-12-31)。 这使我相信某种方式UPDATE语句没有被执行或者我在某种程度上使用ON关键字错误地加入了表中的表。 唯一约束仅在INSERT语句期间触发,或者在ChannelCode , StateCode , ZipCode或EndDate字段的UPDATE期间触发。 我正在对IndDistrnId字段进行批量更新,并彻底检查了电子表格。 再次,这是我尝试这种技术的第一次尝试,所以任何帮助/建议将不胜感激。 谢谢 C# private static string updateCommand = “UPDATE SET Target.ChannelCode = Source.ChannelCode, Target.DrmTerrDesc = Source.DrmTerrDesc, Target.IndDistrnId = Source.IndDistrnId,” + “Target.StateCode = Source.StateCode, Target.ZipCode = Source.ZipCode, Target.EndDate = Source.EndDate, Target.EffectiveDate = Source.EffectiveDate,” + “Target.LastUpdateId = Source.LastUpdateId, Target.LastUpdateDate = […]

哪种模式更适合SqlConnection对象?

哪种模式更适合SqlConnection对象? 哪个性能更好? 你提供任何其他模式吗? class DataAccess1 : IDisposable { private SqlConnection connection; public DataAccess1(string connectionString) { connection = new SqlConnection(connectionString); } public void Execute(string query) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = query; command.CommandType = CommandType.Text; // … command.Connection.Open(); command.ExecuteNonQuery(); command.Connection.Close(); } } public void Dispose() { connection.Dispose(); } } VS class DataAccess2 : […]

您应该重用SqlConnection,SqlDataAdapter和SqlCommand对象吗?

我正在使用以类似于以下代码的布局编写的DAL对象。 我简化了很多代码只是为了显示设置。 public class UserDatabase : IDisposable { private SqlDataAdapter UserDbAdapter; private SqlCommand UserSelectCommand; private SqlCommand UserInsertCommand; private SqlCommand UserUpdateCommand; private SqlCommand UserDeleteCommand; private System.Data.SqlClient.SqlConnection SQLConnection; public UserDatabase() { this.SQLConnection = new System.Data.SqlClient.SqlConnection(ConnectionString); this.UserDbAdapter= new SqlDataAdapter(); this.UserDbAdapter.DeleteCommand = this.UserDeleteCommand; this.UserDbAdapter.InsertCommand = this.UserInsertCommand; this.UserDbAdapter.SelectCommand = this.UserSelectCommand; this.UserDbAdapter.UpdateCommand = this.UserUpdateCommand; } private bool FillUsers(DataSet UserDataSet, out int […]

SQL脚本数据中的关键字在以编程方式执行时导致问题 – C#

我是sql的新手,我的sql脚本中的关键字问题导致了严重问题。 我正在尝试在C#中执行premade .sql脚本文件列表。 我正在将文件读取为字符串并使用command.ExecuteNonQuery()执行它。 这适用于大多数脚本,但我遇到了一个无意中包含关键字的脚本: INSERT INTO [thetable] SELECT ‘123123’, ‘abcabc’, ‘I WANT TO GO TO BED’ UNION ALL SELECT ‘123124’, ‘abcdef’, ‘SOOO TIRED’ 基本上,当它命中GO时命令失败。 我负责创建这些插入文件,所以如果我需要以某种方式重新格式化它们,那么这是可能的; 但是,它们中的数据是不可协商的。 此外,由于我从一个有很多行的文件加载它们,所以参数化以避免这些东西似乎也不可行。 在这一点上,将非常感谢任何帮助。 非常感谢! 编辑添加信息: 为了澄清,实际字符串更像是’ASVFDS4 + 23eF3da34sddsdf3d3t4g … 100charslater … sd5OAyGOsiISIssdsd / sNUIGsdisd354f’。 当我尝试执行命令时,我捕获了exception,其中说: “Unclosed quotation mark after character string ‘ASVFDS4+23eF3da34sddsdf3d3t4g…100charslater…sd5OAy’ 注意,GOOAIS紧跟着5OAy,这让我相信GO实际上被读作命令,导致它在该命令之前期望结束字符串。 运行.NET 3.5 编辑2我也应该澄清,我目前正在拆分实际的GO语句并单独执行命令。 即 USE MyDatabase […]

C#使用SqlCommand.Parameters更新表

我正在尝试使用SqlCommand更新MSSQL表,我认为这是我的T-SQL的语法错误,但这是我到目前为止: SqlCommand sqlCmd = new SqlCommand(“UPDATE yak_tickets SET email = @emailParam, subject = @subjectParam, text = @textParam, statusid = @statusIDParam, ticketClass = @ticketClassParam WHERE id = @ticketIDParam”, sqlConn); 这些参数正常工作,但是,当我运行代码时,表永远不会更新。 任何帮助将不胜感激=) 这是代码的其余部分: #region Parameters /* Parameters */ sqlCmd.Parameters.Add(“@ticketIDParam”, SqlDbType.BigInt); sqlCmd.Parameters[“@ticketIDParam”].Value = ticketID; sqlCmd.Parameters.Add(“@emailParam”, SqlDbType.NVarChar); sqlCmd.Parameters[“@emailParam”].Value = ticketToBeSubmitted.getEmail(); sqlCmd.Parameters.Add(“@subjectParam”, SqlDbType.NVarChar); sqlCmd.Parameters[“@subjectParam”].Value = ticketToBeSubmitted.getSubject(); sqlCmd.Parameters.Add(“@textParam”, SqlDbType.Text); sqlCmd.Parameters[“@textParam”].Value = […]

在c#中解析SQL字符串

我需要解析一个Command.CommandText 。 我不想运行查询。 我只想查看执行命令时查询是否成功。 说我有; “SELECT * FROM SomeTable WHERE (1=1)” 此字符串将成功。 但, “SELECT * FROM SomeTable WHERE (1=1” 不会成功。 现在我的问题。 我将如何Parse这个字符串c# ?

在SqlCommand和SqlDataAdapter之间混淆

每个人我都是学生,不熟悉.NET,特别是MVC3开发,但对于我的一个项目,我要研究它,因此经历学习阶段我面临的问题和困惑是关于DB-Connectivity,哇哇lean lean lean关于从数据库中检索记录是这样的: //Method One: var conn = new SqlConnection(conString.ConnectionString); const string cmdString = “Select * FROM table”; var cmd = new SqlCommand(cmdString, conn); var mySqlDataAdapter = new SqlDataAdapter(cmd); mySqlDataAdapter = new SqlDataAdapter(cmd); mySqlDataAdapter.Fill(myDataSet, “design”); // making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and […]

SqlCommand.Cancel()会提升性能吗?

我已经看到这在代码中显示了几个地方,从来没有解释,只是上面的一个神秘的评论(声明和执行包含在上下文的想法。它只是运行SqlCommand的标准过程): //SqlCommand cmd = new SqlCommand(); //cmd.ExecuteReader(); //Read off the results //Cancel the command. This improves query time. cmd.Cancel (); 基本上,在完成一个查询之后,它会返回并取消它,声称会有一些性能提升。 我想你可能会获得一些内存,并释放XmlReader,但通常情况下它会超出范围。 我之前从未打扰过它,但它最终出现在我正在审查的一些代码中。 在代码中运行它后取消SqlCommand实际上是以某种方式加速它,还是这只是一些奇怪的程序员迷信?

C#SqlDataReader执行统计信息

我正在创建一个自动数据库查询执行队列,这实际上意味着我正在创建一个逐个执行的SQL查询队列。 使用类似于以下的代码执行查询: using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[“NorthwindConnectionString”].ConnectionString)) { cn.Open(); using (SqlCommand cmd = new SqlCommand(“SP”, cn)) { cmd.CommandType = CommandType.StoredProcedure; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { } } } } 我想做的是尽可能多地收集关于执行的信息。 花了多长时间。 受影响的行数。 最重要的是,如果它失败了,为什么它失败了。 实际上我可以获得关于我希望能够保存的执行的任何信息。

参数中的动态where子句

我目前正在尝试构建SqlCommand的where子句。 类似的东西 myCommand.CommandText = “SELECT * ” + “FROM TABLE1 ” + “@whereClause”; //I build up the where clause with a StringBuilder myCommand.Parameters.AddWithValue(“@whereClause” theClause.ToString()); 但似乎这不可能。 我得到了例外: SqlException’@whereClause’附近的语法不正确 我想做这样的事情的原因是因为我想避免X调用数据库,这样我就把排序和过滤留给了服务器。 反正有没有做类似的事情? / edit:where子句看起来像这样的WHERE (TABLE1.COL1 = ‘the value’ OR TABLE1.COL1 = ‘another value’ OR TABLE1.COL1 = ‘this value’ … ) /编辑Finaly这是由于一个愚蠢的错字错误…我改为不使用参数化查询。 我会赞成那些帮助我的人的答案。 即使它没有修复我的(愚蠢的)错误,我也会标记为更接近修复我的情况的答案