【发布时间】:2016-07-08 00:33:26
【问题描述】:
我对将几个 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 多个布尔变量,它的执行速度非常慢(每秒 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 forStructured'。
我正在使用 Monodevelop 5.9.6 在 Unity3D 中编写代码。
【问题讨论】:
标签: c# sql sql-server-2008 sql-update