【发布时间】:2015-08-20 06:52:57
【问题描述】:
我有以下存储过程,它接收 DataSet 作为参数并插入到表 Excel 中。
CREATE PROCEDURE spInsertInvoice
@tblInvoice InvoiceType READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Excel
SELECT Template, Cust_Name, Invoice_No,InvoiceDate FROM @tblInvoice
END
在我的代码文件中,我试图读取Excel Sheet 并填充数据集。但问题是我对如何将DataSet 作为Parameter 发送到stored Procedure 有点困惑。
这是我迄今为止尝试过的,但它似乎不起作用
if (FileUpload1.HasFile)
{
string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));
FileUpload1.PostedFile.SaveAs(path);
OleDbConnection oleCon = new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + path + ";Extended Properties = Excel 12.0;");
OleDbCommand Olecmd = new OleDbCommand("select * from [Sheet1$]", oleCon);
OleDbDataAdapter dtap = new OleDbDataAdapter(Olecmd);
DataSet ds = new DataSet();
dtap.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
if (ds.Tables[0].Rows.Count > 0)
{
string consString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlCommand cmd = new SqlCommand("spInsertInvoice"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.Parameters.AddWithValue("@tblInvoice", ds);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
当我执行它时,它会在 cmd.ExecuteNonQuery() 上抛出 ArgumentException
不存在从对象类型 System.Data.DataSet 到已知的映射 托管提供程序本机类型。
【问题讨论】:
-
执行此操作会发生什么?
-
我已经更新了帖子。
-
表值参数适用于 DataTables,而不是 DataSets。将数据集的表作为参数值传递
标签: c# sql-server stored-procedures dataset