У меня есть следующая Хранимая процедура, которая принимает параметр 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();
}
}
}
Когда я выполняю его, он бросает ArgumentException
на cmd.ExecuteNonQuery()
отображение не существует от типа объекта System.Data .DataSet к известному управляемому собственному типу поставщика.
Что происходит, когда вы выполняете это? –
Я обновил сообщение. – Nuke
Табличные параметры работают с DataTables, а не с DataSets. Передайте таблицу набора данных как значение параметра –