结构化类型中没有足够的字段。结构化类型必须至少有一个字段C#
我的winforms中有一个问题,当我通过存储过程将数据表传递给sql server时,我得到了一个与标题问题相同的错误。 有人能帮我解决吗 dbHelper类中的方法ExecDB连接到sql并传递数据:结构化类型中没有足够的字段。结构化类型必须至少有一个字段C#,c#,sql,sql-server,winforms,C#,Sql,Sql Server,Winforms,我的winforms中有一个问题,当我通过存储过程将数据表传递给sql server时,我得到了一个与标题问题相同的错误。 有人能帮我解决吗 dbHelper类中的方法ExecDB连接到sql并传递数据: public static DataSet ExecDB(string procName, params object[] obj) { SqlConnection sqlCon = new SqlConnection(conString);
public static DataSet ExecDB(string procName, params object[] obj)
{
SqlConnection sqlCon = new SqlConnection(conString);
if (sqlCon.State == ConnectionState.Closed) sqlCon.Open();
SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(da.SelectCommand);
if (da.SelectCommand.Parameters.Count - 1 != obj.Length) throw new Exception("Error");
int index = 0;
foreach (SqlParameter pr in da.SelectCommand.Parameters)
{
if (pr.Direction == ParameterDirection.Input || pr.Direction == ParameterDirection.InputOutput)
{
pr.Value = obj[index++];
//pr.SqlDbType = SqlDbType.Structured;
}
}
DataSet ds = new DataSet();
da.Fill(ds);
if (sqlCon.State == ConnectionState.Open) sqlCon.Close();
return ds;
}
这是我的数据表将通过的:
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("NgayGiam", typeof(DateTime));
dt.Columns.Add("Tile", typeof(int));
dt.Columns.Add("Thang", typeof(string));
dt.Columns.Add("MaMon", typeof(int));
DataRow dr = dt.NewRow();
dr["NgayGiam"] =Convert.ToDateTime(i.SubItems[0].Text);
dr["Tile"] =Convert.ToInt32(tbxTiLeGiam.Text);
dr["Thang"] = twoMonth.Substring(twoMonth.Length - 2) + DateTime.Now.Year;
dr["MaMon"] = Convert.ToInt32(i.Tag.ToString());
dt.Rows.Add(dr);
下面是SQL中的结构:
CREATE TYPE BANGGIAMGIA AS TABLE(
NgayGiam DATE NOT NULL,
Tile INT NOT NULL,
Thang VARCHAR(6) NOT NULL,
MaMon INT NOT NULL
)
和SQL中的进程:
create proc sp_UpdateGiamGia
@temp as BANGGIAMGIA ReadOnly
as
begin
Insert into GIAMGIA Select b.NgayGiam, b.Tile, b.Thang, b.MaMon from @temp as b
Select * from GIAMGIA where MONTH(Ngaygiam) = Month(Getdate()) and year(NgayGiam) = Year(getdate())
end
我不明白为什么会这样。请给我解释一下
谢谢。您应该在MSDN上查找SqlDataAdapter.Fill()方法的文档,并通读一遍,直到您看到可以简化此处的一些代码。@JoelCoehoorn T_TI仍然可以将每条记录传递到destinations表,但我想一次传递哪一行代码出错?您是否尝试在da.Fill(ds)处设置pr.TypeName=“BANGGIAMGIA”和pr.SqlDbType=SqlDbType.Structured?@ChetanRanpariya。我试过了