2015-08-28 98 views
0

我正在使用datatable進行批量插入,但無法在數據庫中插入記錄 和DataAdapter.Update返回0值。SqlDataAdapter.Update沒有插入記錄

這裏是我的DataTable

enter image description here

這裏是保存記錄的數據表功能:

public long SaveImportData(DataTable importDataTable, int userUUid) 
    { 
     try 
     { 
      long result = 0; 
      using (var sqlConnection = new SqlConnection(DBManager.ConnectionString)) 
      { 
       using (var dataAdapter = new SqlDataAdapter()) 
       { 
        dataAdapter.InsertCommand = new SqlCommand(ReferencePricingQueryConstants.usp_RP_IMPORT_DATA, sqlConnection); 
        dataAdapter.InsertCommand.CommandType = CommandType.StoredProcedure; 
        dataAdapter.InsertCommand.Parameters.Add("@P_PRODUCT", SqlDbType.NVarChar, 100, "PRODUCT"); 
        dataAdapter.InsertCommand.Parameters.Add("@P_PRESENTATION", SqlDbType.NVarChar, 200, "PRESENTATION"); 
        dataAdapter.InsertCommand.Parameters.Add("@P_COUNTRY", SqlDbType.NVarChar, 30, "COUNTRY"); 
        dataAdapter.InsertCommand.Parameters.Add("@P_PRICE_TYPE", SqlDbType.NVarChar, 30, "PRICE_TYPE"); 
        dataAdapter.InsertCommand.Parameters.Add("@P_PRICE_CHANGE_DATE", SqlDbType.DateTime, 38, "PRICE_CHANGE_DATE"); 
        dataAdapter.InsertCommand.Parameters.Add("@P_PRICE", SqlDbType.Float, 38, "PRICE"); 
        dataAdapter.InsertCommand.Parameters.AddWithValue("@P_USER_UUID", userUUid); 
        dataAdapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None; 
        dataAdapter.UpdateBatchSize = 100; ; 
        result = dataAdapter.Update(importDataTable); 
        return result; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      _logger.Error(ex); 
      return 0; 
     } 

這裏是存儲過程:

ALTER PROCEDURE [dbo].[usp_RP_IMPORT_DATA] 
 
(
 
@P_PRODUCT NVARCHAR(100), 
 
@P_PRESENTATION NVARCHAR(200), 
 
@P_COUNTRY NVARCHAR(30), 
 
@P_PRICE_TYPE NVARCHAR(30), 
 
@P_PRICE_CHANGE_DATE DATETIME, 
 
@P_PRICE FLOAT, 
 
@P_USER_UUID INT 
 
) 
 
AS 
 
BEGIN 
 

 
    
 
INSERT INTO [dbo].[IMPORTED_PRICES] 
 
      ([PRODUCT],[PRESENTATION],[COUNTRY],[PRICE_TYPE],[PRICE_CHANGE_DATE],[PRICE],[CREATED_BY],[CREATED_TS]) 
 
    VALUES(
 
\t \t \t @P_PRODUCT, 
 
\t \t \t @P_PRESENTATION, 
 
\t \t \t @P_COUNTRY, 
 
\t \t \t @P_PRICE_TYPE, 
 
\t \t \t @P_PRICE_CHANGE_DATE, 
 
\t \t \t @P_PRICE, 
 
\t \t \t @P_USER_UUID, 
 
\t \t \t GETDATE() 
 
\t \t ) 
 

 
END

任何人都可以告訴我我做錯了什麼?

+0

是什麼寫?什麼是錯誤? – Artyom

+1

程序在哪裏? – Artyom

+0

@Artyom:在帖子中添加了SP,並且不會給出任何錯誤DataAdapter.Update返回0值。 – Muntajib

回答

0

PLS開放探查,並檢查您是否SP被稱爲與否。可能不會,因爲您的導入數據庫沒有添加新行,您只能參數化insert命令調用,但沒有指示符可供數據表調用它。所以從代碼中添加一行到數據表中,之後你的sp可能會被調用。

0

去解決方案: 問題是由於數據錶行狀態,而從Excel的RowState讀取數據表被設置爲不變,DataAdapter的作品上排狀態加入它不是治療dataTable的行

importDataTable.Rows[0].RowState; 

Unchanged

通過標記數據錶行作爲補充它的工作:

foreach(DataRow row in importDataTable.Rows) 
{ 
      row.SetAdded(); 
}