Tag: sql

DbDataReader,NextResult()并填充多个表

这个问题是我以前的问题的延续。 没有太多细节,我正在用2个相关的1对多表填充数据集。 所以,我现在的问题是 – 为什么这段代码运作良好 public DataAgencyR_DataSet SelectOne(int id) { DataAgencyR_DataSet result = new DataAgencyR_DataSet(); using (DbCommand command = Connection.CreateCommand()) { try { command.CommandText = SqlStrings.SelectDataAgencyR_SelectOne(); var param = ParametersBuilder.CreateByKey(command, “ID_DeclAgenc”, id, “ID_DeclAgenc”); command.Parameters.Add(param); Connection.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { System.Diagnostics.Trace.WriteLine(String.Format(“{0}-{1}”, reader[0], reader[1])); } System.Diagnostics.Trace.WriteLine(“————-“); reader.NextResult(); while (reader.Read()) { System.Diagnostics.Trace.WriteLine(String.Format(“{0}-{1}”, reader[0], […]

哪个SQL查询在SQL注入方面更安全

我有两个SQL查询,其中每次调用查询时我都试图分别用+1和-1更新sup和opp值。 第一个查询: query=update disc set sup=@sup, opp=@opp where did=@did int sup=getnoofsup(did); int opp = getnoofopp(did); com.Parameters.AddWithValue(“@sup”, sups + 1); com.Parameters.AddWithValue(“@opp”, opps – 1); com.Parameters.AddWithValue(“@did”, did); com.ExecuteNonQuery(); 第二个查询 string query=”update disc set sup=sup+1, opp=opp-1 where did=@did” ; com.Parameters.AddWithValue(“@did”, did); com.ExecuteNonQuery(); 第二次注射查询是否有任何威胁,因为我用sup+1交换@sup ?

SQLDependency + Service Broker

我正在使用SqlDependency在某些表中的数据发生更改时获取通知。 private void subscribeBroker() { using (var conn = new SqlConnection(connString)) { conn.Open(); var cmd = new SqlCommand(“SELECT text FROM dbo.Test”); cmd.Connection = conn; var dependency = new SqlDependency(cmd); dependency.OnChange += dependency_OnChange; SqlDependency.Start(connString); cmd.ExecuteNonQuery(); } } void dependency_OnChange(object sender, SqlNotificationEventArgs e) { //Do something… subscribeBroker(); } 它有效,但我有一些问题。 1)我没有找到一种方法来获取哪些行被更改的信息。 我需要读取整个表中的所有数据,看看有什么不同。 有没有办法获得这些信息? (主要ID,或者其他)也许使用与SqlDependency不同的方法? 2)如果“某人”非常快速地改变数据怎么办? 某些更改可能不会被通知? (我关注通知和再次订阅时间之间的时间。 谢谢。

.Include()。Where()。Linq to Entities Query中的.Select()

我有一个查询下表的Linq查询:具有一对多链接的任务:TaskLinks和TaskLinks具有指向实体的表的一对一链接。 我正在尝试选择任务,急切加载(通过.Include)TaskLinks并选择链接到TaskLink的实体。 但是我需要过滤Task(通过Access Level int)和TaskLinks,这样我就不会包含任何Inactive(bool)记录。 这是我的Linq查询: Tasks.Where(t => t.AccessLevel tl.TaskLinks.Where(tl2=> tl2.IfInactive == false) .Select(tls => tls.Entity)) 我在LinqPad中运行此查询,我收到以下错误,我不明白: ArgumentException:Include路径表达式必须引用在类型上定义的导航属性。 使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 参数名称:路径 如何重新编写此查询以便我可以过滤包含的任务链接,并选择实体? 先感谢您!! 短发

LINQ to SQL在填充对象之前解密值

我的一个表中有一个字段使用加密 ENCRYPTBYPASSPHRASE(,) 当值被放入对象时,该字段仍然是加密的,因此我无法对其进行任何操作。 我无法创建一个视图或存储过程或任何其他解密数据库字段的项目,因为它失去了加密字段的目的。 有没有办法使框架工作运行像 DECRYPTBYPASSPHRASE(, ) 在将值赋给对象之前? 现在我正在获取数据,然后调用ExecuteQuery来解密该值。 并在我的数据模型类的加密值上分配新值。 它有效,但我只是想知道它是否可以通过我不知道的一些选项自动完成。 我试过搜索但没找到任何东西。

当没有找到结果时,处理ExecuteScalar返回null

我有这个代码可能返回没有找到结果 – null String result string searchUby = “SELECT text FROM rooms WHERE year=@year AND event=@eventAND text=@text AND z is NULL”; SqlCommand sqlcom = new SqlCommand(searchUby, conn); sqlcom.Parameters.AddWithValue(“@event”,event.Text); sqlcom.Parameters.AddWithValue(“@text”, cb_room.SelectedItem); sqlcom.Parameters.AddWithValue(“@year”,klientClass.Year()); conn.Open(); result = sqlcom.ExecuteScalar().ToString(); // on this line ex occurs conn.Close(); 我得到这个例外: NullReferenceException: Object reference not set to an instance of an object. 愿有人帮我解决这个问题吗?

使用ExecuteNonQuery()时返回值不正确

我有一个C#程序,我正在编写与SQL Server交互。 我愚蠢地将查询字符串硬编码到C#程序中,并希望将它们转换为服务器上的存储过程。 出于某种原因,一个特定的INSERT语句(工作正常!)不再有效,我无法弄清楚原因。 我甚至运行了一个SQL Profiler Trace,它表明该语句完美形成! 也许有人可以告诉我我做错了什么。 存储过程:此SP只需要一堆参数并将它们插入表中。 非常简单。 ALTER PROCEDURE [dbo].[usp_InsertNewChangeRequest] @Requester INT, @ChangeCreationDate DATETIME, @ChangeName VARCHAR(200), @ChangeDescription VARCHAR(1000), @LastModifiedDate DATETIME, @LastModifiedBy INT, @AffectedArea INT, @ImplementationPlan VARCHAR(MAX), @BackoutPlan VARCHAR(MAX), @RiskLevel TINYINT, @ApprovalRequired BIT, @IsApproved BIT AS BEGIN SET NOCOUNT ON; INSERT INTO dbo.ChangeRequests(Requester, ChangeCreationDate, ChangeName, ChangeDescription, LastModifiedDate, LastModifiedBy, AffectedArea, ImplementationPlan, BackoutPlan, RiskLevel, ApprovalRequired, […]

通过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 = […]

使用WebDAV和C#阅读电子邮件的主题和正文

我使用Microsoft的这个示例来阅读使用WebDAV的电子邮件主题。 我也想读一下身体,但我不确定如何处理这个问题。 我相信这段代码需要修改: strQuery = “” + “SELECT \”DAV:displayname\” FROM \”” + strRootURI + “\”” + “WHERE \”DAV:ishidden\” = false AND \”DAV:isfolder\” = false” + “”; 如您所见,此代码仅返回对象的显示名称。 如何修改以恢复身体?

需要找到DB列的类型

这是我的代码片段。我得到了数据库中存在的所有表名和列名。现在我需要知道列的类型。比如它的int或varchar或其他什么。可以帮助我吗? 顺便说一下这是C#。 OleDbConnection con = new OleDbConnection(connectionString); DataTable schemaCols; DataTable schemaTbl; List tablesnames = new List(); string returnString=””; try { con.Open(); object[] objArrRestrict; objArrRestrict = new object[] { null, null, null, “TABLE” }; schemaTbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict); foreach (DataRow row in schemaTbl.Rows) { tablesnames.Add(row[“TABLE_NAME”].ToString()); } List columnnames = new List(); foreach (string str in tablesnames) […]