gpt4 book ai didi

c# - 结构化类型必须至少有一个字段 c#

转载 作者:行者123 更新时间:2023-11-30 16:04:07 27 4
gpt4 key购买 nike

我真正想做的是将一个字符串数组发送到 SQL Server。我正在使用 SQL Server 2008。

这可以标记为重复,但在实现来自 stactoverflow 的解决方案时我面临着另一个问题

链接:How to pass an array into a SQL Server stored procedure

这是我的 C# 和存储过程代码

C#代码:

string[] str = new string[] {"s" , "a" , "k"};

DataTable dt = new DataTable();
dt.Columns.Add("names");

foreach (string item in str)
{
dt.Rows.Add(item);
}

foreach (DataRow r in dt.Rows)
{
Console.WriteLine(r["names"].ToString());
}

DataTable tvp = new DataTable();

SqlConnection conn = new SqlConnection("Data Source=SHZAK;Initial Catalog=synchroniztionTesing;Integrated Security=True");
conn.Open();

using (conn)
{
SqlCommand cmd = new SqlCommand("strpdPassAnStringArray", conn);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
tvparam.SqlDbType = SqlDbType.Structured;

cmd.ExecuteScalar();
}

在创建存储过程之前,我创建了一个自定义类型:

CREATE TYPE dbo.arrayOfNames
AS TABLE
(
name nvarchar(max)
);

存储过程代码:

CREATE PROCEDURE [dbo].[strpdPassAnStringArray]
@List AS dbo.arrayOfNames READONLY
AS
BEGIN
SET NOCOUNT ON;

SELECT name FROM @List;
END

但在应用程序代码中它引发了这个异常:

There are not enough fields in the Structured type. Structured types must have at least one field.

在线

cmd.ExecuteScalar();

最佳答案

回答:

我问这个问题太蠢了,但至少现在我知道是什么导致了这个异常

感谢@Gusman

如果您的 DataTable 是空的,就像我的情况一样,可以引发此异常

        string[] str = new string[] {"sheraz" , "ahmed" , "khan"};
DataTable tvp = new DataTable();


tvp.Columns.Add("names");
foreach (string item in str)
{
tvp.Rows.Add(item);
}

foreach (DataRow r in tvp.Rows)
{
Console.WriteLine(r["names"].ToString());
}

SqlConnection conn = new SqlConnection("Data Source=SHZAK;Initial Catalog=synchroniztionTesing;Integrated Security=True");
conn.Open();

using (conn)
{
SqlCommand cmd = new SqlCommand("strpdPassAnStringArray", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
cmd.ExecuteScalar();
}

关于c# - 结构化类型必须至少有一个字段 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35700243/

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