[英]operand type clash: int is incompatible with utblProgramAllotment[user defined table type]
[英]Operand type clash: table type is incompatible with int
我正在嘗試通過表將整數值的集合傳遞給存儲過程
請在下面找到C#代碼
int i = lbActors.Items.Count;
int[] actors = new int[i];
int j = 0;
foreach (ListItem item in lbActors.Items)
{
if (item.Selected == true)
{
actors[j] = Convert.ToInt32(item.Value);
j++;
}
}
DataTable dt = new DataTable("movieAndActorType");
dt.Columns.Add("actorId",typeof(Int32));
int k=0;
while(actors[k]!=0)
{
dt.Rows.Add(actors[k]);
k++;
}
try
{
sc.CommandText = "usp_AddMovie";
sc.Connection = sqlCon;
sc.CommandType = CommandType.StoredProcedure;
sc.Parameters.Add("@producerId", SqlDbType.Int).Value = Convert.ToInt32(ddlProducer.SelectedValue);
sc.Parameters.Add("@actorIds", SqlDbType.Structured).Value = dt;
sc.Parameters.Add("@movieName", SqlDbType.VarChar).Value = txtName.Text;
sc.Parameters.Add("@yearOfRelease", SqlDbType.Int).Value = Convert.ToInt32(txtReleaseYear.Text);
sc.Parameters.Add("@plot", SqlDbType.VarChar).Value = txtPlot.Text;
sc.Parameters.Add("@image", SqlDbType.Image).Value = imgbyte;
sqlCon.Open();
sc.ExecuteNonQuery();
sqlCon.Close();
}
catch(SqlException ex)
{
Console.WriteLine(" SQL error" + ex.ToString());
}
在“ SQL Server”中,我試圖在下面的兩個表中輸入數據
create table tbl_movie
(
movieId int primary key IDENTITY(1,1),
producerId int foreign key references tbl_producer(producerId),
movieName varchar(30) not null unique,
yearOfRelease int not null check(yearOfRelease>1900 and yearOfRelease<=datepart(yyyy,getDate())),
plot varchar(5000) not null,
poster image
);
create table tbl_movieAndActor (
movieId int foreign key references tbl_movie(movieId),
actorId int foreign key references tbl_actor(actorId),
constraint pk_movieAndActor primary key (movieId,actorId)
);
創建的用戶定義類型,以將數據從應用程序傳遞到過程
create type movieAndActorType As Table
(
actorId int not null
)
和存儲過程
create proc proc_AddMovie(@producerId int,@actorIds As movieAndActorType Readonly,@movieName varchar(50),@yearOfRelease int,@plot varchar(500),@image image)
as
begin
insert into tbl_movie(producerId,movieName,yearOfRelease,plot,poster) values(@producerId,@movieName,@yearOfRelease,@plot,@image)
insert into tbl_movieAndActor(movieId,actorId) select scope_identity(),actorId from @actorIds
end
我在sql server中測試了存儲過程,該存儲過程在那里工作正常,但是當我通過應用程序傳遞值時,它會拋出sql異常。
"Operand type clash: table type is incompatible with int"
我在編碼方面很幼稚,請幫助我解決此問題。
謝謝
我終於找到了錯誤的原因,我在代碼中使用了不正確的過程名稱。 過程名稱為“ Proc_addMovie”,但我使用的是“ usp_AddMpvie”。浪費了很多時間后,我終於注意到了。
您需要修復您的C#代碼,並確保它首先起作用。 您的while循環將永遠無法進行。 這是填充表格的方法:
DataTable dt = new DataTable("movieAndActorType");
dt.Columns.Add("actorId", typeof(Int32));
for (int i = 0; i < actors.Length; i++)
{
var newRow = dt.NewRow();
newRow["actorId"] = actors[i];
dt.Rows.Add(newRow);
}
嘗試將其插入到tbl_MovieAndActor表中:INSERT INTO tbl_movieAndActor(movieId,actorId)SELECT movieId = @ movieId,@ actorIds中的actorId
這一切都可以在此使用C#代碼和您的存儲過程:
int[] actors = { 7, 8, 9 }; // Actor IDs in database
DataTable dt = new DataTable("movieAndActorType");
dt.Columns.Add("actorId", typeof(Int32));
for(int i = 0;i <actors.Length; i++)
{
var dRow = dt.NewRow();
dRow["actorId"] = actors[i];
dt.Rows.Add(actors[i]);
}
var img = new Byte[5];
try
{
using (var conn = new SqlConnection("Your connection string"))
{
using (var cmd = new SqlCommand())
{
cmd.CommandText = "usp_AddMovie";
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@producerId", SqlDbType.Int).Value =
Convert.ToInt32("99");
cmd.Parameters.Add(new SqlParameter { ParameterName =
"@actorIds", SqlDbType = SqlDbType.Structured, Value = dt,
TypeName = "dbo.movieAndActorType" });
cmd.Parameters.Add("@movieName", SqlDbType.VarChar).Value
= "Spectre";
cmd.Parameters.Add("@yearOfRelease", SqlDbType.Int).Value
= Convert.ToInt32("1972");
cmd.Parameters.Add("@plot", SqlDbType.VarChar).Value =
"Some Plot";
cmd.Parameters.Add("@image", SqlDbType.Image).Value =
img;
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
catch (SqlException ex)
{
Console.WriteLine(" SQL error" + ex.Message);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.