我对将几个bool变量的值更新到表中有疑问。我的结构是:
在C#中,我有几个bool变量,如
public bool varName1 = false;
public bool varName2 = false;
public bool varName3 = false;
等。 (超过一百)
在SQL Server 2014中,我有一个名为“DigitalInputs”的表,我的数据如下:
名称(nvarchar 255)|价值(位)
VarName1 |真
VarName2 |假
VarName3 |真
等
我的问题是,如果我想用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的新手。
// EDITED,关于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不存在而且我不知道为什么,我有以下错误:错误CS0117:System.Data.SqlDbType' does not contain a definition for
结构化'。
我正在使用Monodevelop 5.9.6在Unity3D中编写代码。
答案 0 :(得分:3)
你可以尝试其中一种。
1)表值参数
查看以下答案及其中的链接。
How to pass table value parameters to stored procedure from .net code
2)将输入作为XML传递
从ID创建一个XElement。使用相同的方法传递XElement。然后查看下面的链接,了解如何在SQL中使用XML。