すべての '項目'が数値であるか、すべての項目が英数字である限り、これは機能します。数値とアルファベットの 'items'があると、値が正しく入力されません。混合データ型のCSVファイルからデータを読み取る
ここにコードされています。これは動作します
ALB001,0
ALB002,66
10001,0
10016,348
:
public void updateInventory()
{
try
{
if (File.Exists(inventoryUpdateDirectory + "inventoryUpdate.csv"))
{
csvReader csv = new csvReader();
DataTable inventory = csv.read(inventoryUpdateDirectory + "inventoryUpdate.csv");
//int test = inventory.Rows.Count;
string sql = "";
foreach (DataRow inventoryItem in inventory.Rows)
{
try
{
sql = " Update Inventory set OnHand = " + inventoryItem[1] + " WHERE Sku = '" + inventoryItem[0].ToString().Trim() + "'";
//executeSQL(sql);
}
catch { }
}
File.Delete(inventoryUpdateDirectory + "inventoryUpdate.csv");
}
else
{
writeToFile("fileDoesntExist", inventoryUpdateDirectory + "error.txt");
}
}
catch { }
}
ここでは、読み込むファイルです
ALB001,0
ALB002,66
これは動作します:
10001,0
10016,348
を
これは動作しません。
ALB001,0
ALB002,66
10001,0
10016,348
それはALB001
CSVにおける最初の「列」の値を持つ必要があり、空の{}
+ inventoryItem[0] {} object {System.DBNull}
としてinventoryItem
配列を記入します文字数を含めることができるため、常に文字列として扱う必要があります.2番目の '列'は常に数字になります。
誰かがこれを理解するのを手伝ってくれますか?
私は文字列としてキャストするためにsqlクエリを編集する必要があると思いますが、わかりません。
CSVリーダーEDIT:以下の例では
namespace CSV
{
public class csvReader
{
public DataTable read(string strFileName)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=NO;FMT=Delimited\"");
conn.Open();
string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strQuery, conn);
DataSet ds = new DataSet("CSV File");
adapter.Fill(ds);
return ds.Tables[0];
}
public DataTable read(string strFileName, bool firstRowHeaders)
{
string hdr = "NO";
if (firstRowHeaders) { hdr = "YES"; }
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=" + hdr + ";FMT=Delimited\"");
conn.Open();
string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strQuery, conn);
DataSet ds = new DataSet("CSV File");
adapter.Fill(ds);
return ds.Tables[0];
}
}
}
インラインSQLを使用せず、パラメータを使用してDataTypesを定義します。 – Zachary
これは、もはやここにいない別の開発者によって行われました。書き直しは現時点では選択肢ではありません。 –
csvReaderとは何ですか?問題がそこから始まることはほぼ確実です。 – Steve