gpt4 book ai didi

c# - 更新 SQL 表中 "list"变量值的最佳方法

转载 作者:行者123 更新时间:2023-11-30 21:50:48 24 4
gpt4 key购买 nike

我对将几个 bool 变量的值更新到表中有疑问。我的结构是:

在 C# 中,我有几个 bool 变量,例如

public bool varName1 = false;
public bool varName2 = false;
public bool varName3 = false;

等(一百多个)

在 SQL Server 2014 中,我有一个名为“DigitalInputs”的表,其中的数据如下:

名称 (nvarchar 255) |值(位)

变量名1 |是的

变量名2 |错误

变量名3 |是的

等等

我的问题是,如果我想在 C# 中用 bool 变量的值更新 sql server 表中的值,哪种方法最有效?

现在我使用的是:

using (SqlCommand command = new SqlCommand("UPDATE DigitalInputs SET Value = @VALUE WHERE Name = @NAME", connection))
{

command.Parameters.Add(new SqlParameter("NAME", "varName1"));
command.Parameters.Add(new SqlParameter("VALUE", varName1.ToString()));
command.ExecuteNonQuery(); //Execute the non query
command.Parameters.Clear(); //Clear the parameters to add later new ones

command.Parameters.Add(new SqlParameter("NAME", "varName2"));
command.Parameters.Add(new SqlParameter("VALUE", varName2.ToString()));
command.ExecuteNonQuery();
command.Parameters.Clear();

等等

一开始它运行良好,但现在有 100 多个 bool 变量,它执行得非常慢(每秒 3 次)。我正在考虑使用数据表或 iEnumerable 列表,但我不确定我应该怎么做,我真的是 C# 和 SQL 的新手。

//已编辑,关于 TVP 的问题

我在实现 DataTable 解决方案时遇到了一些问题,我现在拥有的是:

在 SQL 中:

CREATE TYPE dbo.DigitalInputs AS TABLE
(
Name NVARCHAR(255),
Value BIT
)

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE UpdateValue
(@tableData AS dbo.DigitalInputs READONLY)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.DigitalInputs
SET dbo.DigitalInputs.Value = @tableData.Value
FROM dbo.DigitalInputs
INNER JOIN @tableData ON dbo.DigitalInputs.Name = @tableData.Name
END

我不确定这个过程创建中的 SQL 语法,我对 SQL 语言有点迷茫。

在 C# 中:

DataTable dataTable = new DataTable ();
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Value", typeof(bool));
dataTable.Rows.Add("varName1", varName1);
//etc...

using (SqlCommand command = new SqlCommand("UpdateValue", connection))
{
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter = new SqlParameter("@tableData", dataTable);
parameter.SqlDbType = SqlDbType.Structured;
command.Parameters.Add(parameter);
}

似乎 SqlDbType.Structured 不存在,我不知道为什么,我有以下错误:error CS0117: System.Data.SqlDbType' does not contain a definition for结构化的。我正在使用 Monodevelop 5.9.6 在 Unity3D 中编写代码。

最佳答案

您可以尝试其中之一。

1)表值参数

查看以下答案和其中的链接。

How to pass table value parameters to stored procedure from .net code

2) 将输入作为 XML 传递

根据 ID 创建 XElement。使用相同的方法传递 XElement。然后查看以下链接,了解如何在 SQL 中使用 XML 的示例。

https://msdn.microsoft.com/en-IN/library/ms187897.aspx

关于c# - 更新 SQL 表中 "list"变量值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com