我真正想要做的是我想發送一個字符串數組到SQL Server。我使用SQL Server 2008的結構化類型必須至少有一個字段c#
這可以被標記爲重複的,但我現在面臨執行時從stactoverflow
的解決方案LINK完全是另外一個問題: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
但在應用程序代碼是提出這個例外:
上線沒有足夠的結構化類型中的字段。結構化類型必須至少有一個字段。
cmd.ExecuteScalar();
你DatTable TVP是空的,沒有數據,因此沒有財產,有一些填充... – Gusman
@Gusman你是對的:)多謝.. – ShearzAhmed