我試圖運行測試用例,這將不會工作... 我在這裏做錯了什麼?C#將表值參數傳遞給SqlCommand不工作
這裏的SQL:
CREATE TABLE
Playground.Test (saved DateTime)
GO
CREATE TYPE
Playground.DateTimeTable AS TABLE
([time] DATETIME);
GO
CREATE PROCEDURE
Playground.InsertDate
@dt Playground.DateTimeTable READONLY
AS
BEGIN
INSERT INTO Playground.Test (saved)
SELECT [time]
FROM @dt
END
GO
和代碼連接並執行該過程:
const String connString =
"server = SERVER; database = DB; UID = myUserID; pwd = myPassword;";
static void Main(string[] args)
{
SqlCommand command =
new SqlCommand(
"EXEC Playground.InsertDate",
new SqlConnection(connString));
DataTable table = new DataTable("DateTimeTable");
table.Columns.Add("[time]", typeof(DateTime));
table.Rows.Add(DateTime.Parse("10/27/2004"));
SqlParameter tvp = command.Parameters.AddWithValue("@dt", table);
tvp.SqlDbType = SqlDbType.Structured;
tvp.TypeName = "Playground.DateTimeTable";
command.Connection.Open();
int affected = command.ExecuteNonQuery();
command.Connection.Close();
Console.WriteLine(affected);
Console.ReadKey();
}
我沒有得到任何錯誤。只有0行受到影響。
這個工作在SQL Server中,雖然:
DECLARE @dt Playground.DateTimeTable
INSERT INTO @dt VALUES ('2004-10-27')
EXEC Playground.InsertDate @dt
那我在這裏做什麼?
你可以分析你的服務器來查看正在執行的SQL嗎? – DavidG
雖然我會建議從命令中刪除'EXEC'並設置'command.CommandType = CommandType.StoredProcedure'。 – DavidG
@DavidG另一種解決方案是使命令文本爲'EXEC Playground.InsertDate @ dt'。感謝您的線索! –