因此,我有一個包含27列的網站位置信息數據庫。我編寫了一個批量導入功能,它可以接收一個CSV文件並允許您修改信息。當CSV文件包含每一列中的信息時,一切正常,但當空字符串/ null時,它會將空字符串推送到數據庫並清除之前的內容。C# - 導入一個空的字符串不會通過批量導入發送到數據庫的CSV
爲了能夠快速更新數據庫中的某些屬性,我的客戶端只需要放置站點的主鍵(我已經編碼了導入以便更新)並填寫了其他任何屬性必須填寫其餘的。因此,例如,對於一個位置的CSV文件可能是這個樣子:
SITE32,,,,BS,11111,,43607,123566789,123456789,2.2.2.2,1.1.1.1.1,1.1.1.1,0,Test,Test,Testing,2,12123,5002,N/A,4,00201,3,000,3703,5
說這個網站已經存在於數據庫中,我只是想更新填充在字段留白的那些應該僅僅停留。一樣。
這是我到目前爲止的代碼
protected void btnBulkSite_click(object sender, EventArgs e)
{
if (FileUpLoad1.HasFile)
{
FileUpLoad1.SaveAs(@"C:\temp\" + FileUpLoad1.FileName);
btnBulkSite.Text = "File Uploaded: " + FileUpLoad1.FileName;
}
else
{
btnBulkSite.Text = "No File Uploaded.";
}
DataTable tblcsv = new DataTable();
tblcsv.Columns.Add("SERVER_ID", typeof(string));
tblcsv.Columns.Add("SITE_NAME", typeof(string));
tblcsv.Columns.Add("SITE_ADDRESS", typeof(string));
tblcsv.Columns.Add("SITE_CITY", typeof(string));
tblcsv.Columns.Add("SITE_STATE", typeof(string));
tblcsv.Columns.Add("SITE_ZIPCODE", typeof(string));
tblcsv.Columns.Add("SITE_COUNTY", typeof(string));
tblcsv.Columns.Add("SITE_INTERNALZIP", typeof(string));
tblcsv.Columns.Add("SITE_PHONE_NUM", typeof(string));
tblcsv.Columns.Add("SITE_FAX_NUM", typeof(string));
tblcsv.Columns.Add("SERVER_SUBNET_ADDR", typeof(string));
tblcsv.Columns.Add("SERVER_IP_ADDR", typeof(string));
tblcsv.Columns.Add("SERVER_GATEWAY_ADDR", typeof(string));
tblcsv.Columns.Add("COSTCENTER_NUM");
tblcsv.Columns.Add("DCMF_NAME", typeof(string));
tblcsv.Columns.Add("LU_ID", typeof(string));
tblcsv.Columns.Add("XIDPU_ID", typeof(string));
tblcsv.Columns.Add("TRAININGSITE_IND");
tblcsv.Columns.Add("PBA_FICS_NUM");
tblcsv.Columns.Add("PBA_CITY_ID", typeof(string));
tblcsv.Columns.Add("REGION_NAME", typeof(string));
tblcsv.Columns.Add("SITETYPE_ID");
tblcsv.Columns.Add("PBA_OFFICE_ID", typeof(string));
tblcsv.Columns.Add("SITEORIGIN_ID");
tblcsv.Columns.Add("REGION_ID", typeof(string));
tblcsv.Columns.Add("PBA_BANK_ID", typeof(string));
tblcsv.Columns.Add("SITE_REGION_ID");
System.IO.StreamReader stream = new System.IO.StreamReader(FileUpLoad1.PostedFile.InputStream);
string ReadCSV = stream.ReadToEnd();
foreach (string csvRow in ReadCSV.Split('\n'))
{
if (!string.IsNullOrEmpty(csvRow))
{
tblcsv.Rows.Add();
int count = 0;
foreach (string FileRec in csvRow.Split(','))
{
tblcsv.Rows[tblcsv.Rows.Count - 1][count] = FileRec;
count++;
}
}
}
RemoveAllNullColumnsFromDataTable(tblcsv);
}
public void RemoveAllNullColumnsFromDataTable(DataTable tblcsv)
{
for (int h = 0; h < tblcsv.Rows.Count; h++)
{
if (tblcsv.Rows[h].IsNull(0) == true)
{
tblcsv.Rows[h].Delete();
}
}
tblcsv.AcceptChanges();
foreach (var column in tblcsv.Columns.Cast<DataColumn>().ToArray())
{
if (tblcsv.AsEnumerable().All(dr => dr.IsNull(column)))
tblcsv.Columns.Remove(column);
}
tblcsv.AcceptChanges();
InsertCSVRecords(tblcsv);
}
public void InsertCSVRecords(DataTable csvdt)
{
connection();
//SqlBulkCopy objbulk = new SqlBulkCopy(con);
var objbulk = new BulkOperation(con);
objbulk.AllowUpdatePrimaryKeys = true;
objbulk.DestinationTableName = "SITE_INFO";
objbulk.ColumnMappings.Add("SERVER_ID", "SERVER_ID", true);
objbulk.ColumnMappings.Add("SITE_NAME", "SITE_NAME");
objbulk.ColumnMappings.Add("SITE_ADDRESS", "SITE_ADDRESS");
objbulk.ColumnMappings.Add("SITE_CITY", "SITE_CITY");
objbulk.ColumnMappings.Add("SITE_STATE", "SITE_STATE");
objbulk.ColumnMappings.Add("SITE_ZIPCODE", "SITE_ZIPCODE");
objbulk.ColumnMappings.Add("SITE_COUNTY", "SITE_COUNTY");
objbulk.ColumnMappings.Add("SITE_INTERNALZIP", "SITE_INTERNALZIP");
objbulk.ColumnMappings.Add("SITE_PHONE_NUM", "SITE_PHONE_NUM");
objbulk.ColumnMappings.Add("SITE_FAX_NUM", "SITE_FAX_NUM");
objbulk.ColumnMappings.Add("SERVER_SUBNET_ADDR", "SERVER_SUBNET_ADDR");
objbulk.ColumnMappings.Add("SERVER_IP_ADDR", "SERVER_IP_ADDR");
objbulk.ColumnMappings.Add("SERVER_GATEWAY_ADDR", "SERVER_GATEWAY_ADDR");
objbulk.ColumnMappings.Add("COSTCENTER_NUM", "COSTCENTER_NUM");
objbulk.ColumnMappings.Add("DCMF_NAME", "DCMF_NAME");
objbulk.ColumnMappings.Add("LU_ID", "LU_ID");
objbulk.ColumnMappings.Add("XIDPU_ID", "XIDPU_ID");
objbulk.ColumnMappings.Add("TRAININGSITE_IND", "TRAININGSITE_IND");
objbulk.ColumnMappings.Add("PBA_FICS_NUM", "PBA_FICS_NUM");
objbulk.ColumnMappings.Add("PBA_CITY_ID", "PBA_CITY_ID");
objbulk.ColumnMappings.Add("REGION_NAME", "REGION_NAME");
objbulk.ColumnMappings.Add("SITETYPE_ID", "SITETYPE_ID");
objbulk.ColumnMappings.Add("PBA_OFFICE_ID", "PBA_OFFICE_ID");
objbulk.ColumnMappings.Add("SITEORIGIN_ID", "SITEORIGIN_ID");
objbulk.ColumnMappings.Add("REGION_ID", "REGION_ID");
objbulk.ColumnMappings.Add("PBA_BANK_ID", "PBA_BANK_ID");
objbulk.ColumnMappings.Add("SITE_REGION_ID", "SITE_REGION_ID");
con.Open();
objbulk.BulkUpdate(csvdt);
con.Close();
}
我的邏輯是,一旦信息從CSV導入文件就被移動到一個數據表,如果它包含空值,則在列數據表被刪除。所以沒有什麼可以映射到BulkUpdate列映射,因此沒有數據應該推送到該列的數據庫。
這不是因爲某些原因,我不知道爲什麼...有沒有更好的方法?
任何幫助,將不勝感激,謝謝。
我只是建立單獨的更新語句並直接執行它們。 – Paparazzi