Tag: sql

我可以避免使用SQL_VARIANT查询entity framework吗?

我首先使用实体​​框架6代码,我有一个简单的模型: public class Task { [Key] public int aid {get;set;} [MaxLength(256)] public string Memo {get;set;} } 我得到一个模型: int id = 3; from t in db.Tasks where t.aid == id select t; 要么 int id = 3; db.Tasks.Find(id); 肯定是快但不…… 我查看由EF ORM生成的IntelliTrace中的SQL,如下所示: DECLARE @p__linq__0 AS SQL_VARIANT; SET @p__linq__0 = 3; SET STATISTICS TIME ON SET STATISTICS IO […]

Entity Designer是否支持重复关联数据的多对多关系?

包A有一个桌面Y和一个Monitor Z.包B有一个桌面Y和两个 Monitor Z。 我想在Entity Designer创建的数据库中表示该关系。 StandardPackage和StandardMachine (包括台式机,显示器,笔记本电脑等)之间存在多对多关系。 每个季度,我们都会更新我们的包裹,客户下订单。 他们选择一个包,当下订单时,该包的StandardMachines将他们的数据(类型,品牌,型号等)转储到新创建的Machines 。 问题在于实体设计器为StandardPackageStandardMachine关系创建联结表的方式。 联结表有两列对应于关系每端记录的ID,联结表的主键是这两个ID的组合。 因此,对于第一段中的示例,如果Package A的Id为1,则Package B的Id为2,Desktop Y的Id为1,Monitor Z的Id为2,我需要的是 StandardPackageId | StandardMachineId ——————|—————— 1 | 1 1 | 2 2 | 1 2 | 2 2 | 2 但显然你不能有两个2/2记录。 有没有一种很好的方法告诉实体设计器我打算做什么,以便它将为连接表创建一个自动递增的主键列? 或者我是否必须自己手动创建联结表并自行处理关联? 顺便说一句,如果有人甚至知道如何改写我的问题标题,请这样做。

数据源中String类型的给定值无法转换为指定目标列的bigint类型

那是我的代码: protected void SendToServer_Click(object sender, EventArgs e) { DataTable Values = Session[“valuesdt”] as DataTable; if (Values.Rows.Count > 0) { //Fix up default values for (int i = 0; i < Values.Rows.Count; i++) { Values.Rows[i]["Mobile1"] = Values.Rows[i]["Mobile1"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Mobile1"].ToString()); Values.Rows[i]["Mobile2"] = Values.Rows[i]["Mobile2"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Mobile2"].ToString()); Values.Rows[i]["Tel"] = Values.Rows[i]["Tel"].ToString() == […]

SQL Server十进制 – 为什么我的十进制值只捕获十进制后的两位小数? 是的,它是小数(18,5)

我将首先说我的十进制数据类型定义为十进制(18,5): 在应用程序到达数据库之前来自我的应用程序的值是: 所以你可以看到目前为止,一切看起来都不错。 我应该在我的数据库表中看到列Capsule105 。 但是,在我的记录保存到数据库之后,我查看它插入的记录 – 看看最后一行: 该值不应在两位小数后停止。 它应该到我的数据库中定义的最后一个小数位,对吧? 这是我的InsertOrUpdate方法(VS中的模板库存): public void InsertOrUpdate(CalculatedResults calculatedresults) { if (calculatedresults.Pk == default(int)) { // New entity context.CalculatedResults.Add(calculatedresults); } else { // Existing entity context.Entry(calculatedresults).State = EntityState.Modified; } } 我正在使用Code First方法并从我的模型生成我的数据库。 有什么想法在这里发生了什么? 请帮忙!!

带有可选参数的Sql update命令?

我将大约500,000个对象插入到数据库中,其中许多对象是相同的(在数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用方法“更新 – 如果没有行影响 – 插入”。 问题是有时一个对象将某个字段设置为null(从文件中读取)并且已经在数据库中设置了一些值,因此我将其更新为null =擦除它。)如何实现方案,您只更新字段那不是空的? 这是我现在如何做的一个简单示例: private const string UpdateKun = “UPDATE pde.Kun SET Jmeno=@Jmeno WHERE Licence=@Licence”; private const string InsertKun = “INSERT INTO pde.Kun ([Licence], [Jmeno], [VykonnostniStupen]) VALUES (@Licence, @Jmeno, @VykonnostniStupen)”; var cmd = new SqlCommand(UpdateKun, conn, tran); cmd.Parameters.AddWithValue(“@Licence”, kun.Licence); cmd.Parameters.AddWithValue(“@Jmeno”, kun.Jmeno); RepairNulls(cmd.Parameters); if (cmd.ExecuteNonQuery() > 0) return; cmd = new SqlCommand(InsertKun, […]

LINQ to SQL复杂连接具有混合条件

我有一个SQL语句,我试图转换为LINQ to SQL,我已经设法将其中的大部分转换,但我遇到了一个我无法在LINQ中解决的声明。 导致头痛的SQL查询部分是: SELECT * FROM step INNER JOIN action on (step.NextAction = action.ID and step.ActionStatus != 4) or (step.ACTION = action.ID and step.ActionStatus = 4) step是包含一系列操作的表, action是可用action的列表。 ActionStatus是状态列表的索引 – 4 ==’失败’。 基本上,对于非失败的操作,它需要返回下一个操作。 如果操作失败,则返回当前操作。 这只是其中一个连接(在完整查询中总共有10个表),其中大多数是直接的equijoins,有些是在多个条件下,但我已经能够在LINQ中编写它们而没有任何问题。 不过这个,我看不出它会怎么写。 我看到了这个答案,但也看不出如何在这种情况下应用它。 有任何想法吗?

如何在C#中的SQL语句中构建参数化查询或用户转义?

command.CommandText = String.Format(“CREATE LOGIN {0} WITH password='{1}'”, loginName, password); loginName和password基于某些用户输入 我意识到这样做是不好的做法但是如何在这里避免sql注入?

如何在entity framework中获取一些实体列?

假设我有一个包含超过1000000列的表。 当我使用LINQ To SQL和Entity-Framework所有查询都将用c#编写,如下所示: EFContext.MyTableName.Where(row=>row.column1==someValue) .Select(…) .FirstOrDefault(…) .Any(…) … 如何只获得实体的一些列? 有没有办法只获得1000000列中的第1列和第2列和第3列? 注意: 结果数据的类型应该在选择后保留,例如,如果没有过滤某些列类型的结果是Type1,那么非常重要的是,在过滤之后,结果的类型是Type1,但是被过滤的Type1的那些属性的值应该是null或default。

SQL / C# – UPSERT上的主键错误

更新 (简化问题,从问题中删除C#) 在下列情况下,如何编写可以识别两行相同的UPSERT … 看看那里有一个\ b [退格]编码(奇怪的小角色)? SQL认为这些是相同的。 虽然我的UPSERT将此视为新数据并尝试INSERT,其中应该有更新。 //UPSERT INSERT INTO [table] SELECT [col1] = @col1, [col2] = @col2, [col3] = @col3, [col4] = @col4 FROM [table] WHERE NOT EXISTS — race condition risk here? ( SELECT 1 FROM [table] WHERE [col1] = @col1 AND [col2] = @col2 AND [col3] = @col3) UPDATE [table] […]

在SqlDataAdapter中防止SQL注入的最佳方法

您好我想知道在SqlDataAdapter防止SQL injection的最佳方法是什么(因为没有办法使用参数化查询)? 例如,让我们使用这部分代码: da_services = new SqlDataAdapter(“SELECT * from table WHERE column='” + textBox1.Text + “‘ AND column2='” + somestring + “‘”, conn); scd_services = new SqlCommandBuilder(da_services); dt_services = new DataTable(); da_services.Fill(dt_services); dtg_services.DataSource = dt_services; conn.Close(); 感谢您的时间。