我在库存应用的C#项目中使用Csv文件和datagridview,我尝试将行更新为CSV文件!
如果用户使用新单词编辑当前单词行,我需要更新,但我的问题是我需要保存当前单词和新单词并获取总数伪代码示例:
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if(row in column is modified)
update specific row with comma to current file and load it...
}
Csv文件看起来像, 电流:
1; 2; 4; 5
更新
1; 2,A ;; 4; 5 已更改设备 A 总计:1次......
修改下一行:
1; A ;; 4 , B , C; 5 已更改设备 B 和 C 总变化:2次...
使用数据库可以轻松更新数据,但我没有安装sql server,所以这个选项对我来说不是我想的..
我的目标是跟踪设备输入/输入,如果您有解决方案,请分享。
答案 0 :(得分:1)
没有使用SQL服务器,可能是like this could help的东西? LiteDB您已拥有LiteDB来托管您的数据,并在您需要时将其导出为CSV。使用CSV文件通常意味着每次有更新时你都会重写整个文件......这很慢而且很麻烦。我建议您使用CSV将数据从A点传输到B点,但不要维护数据。
另外,如果您真的想坚持使用CSV,请查看以前称为JET驱动程序的Microsoft Ace OLEDB驱动程序。我用它来查询CSV文件,但我从来没有用它来更新...所以你的里程可能会有所不同。
如果不使用实际的DataBase或数据库驱动程序,您必须使用StreamReader和StreamWriter。使用StreamReader读取文件,使用StreamWriter编写新文件。在您的StreanReader中。这意味着您在StreamReader中有代码可以找到要更新的正确行。
这是我创建并用于与LiteDB交互的类。它并不是那么强大,但它完全符合我当时的需要。我不得不对我平台上托管的一系列产品进行更改,并使用它来跟踪进度。
using System;
using LiteDB;
namespace FixProductsProperty
{
public enum ListAction
{
Add = 0,
Remove,
Update,
Disable,
Enable
}
class DbInteractions
{
public static readonly string dbFilename = "MyDatabaseName.db";
public static readonly string dbItemsTableName = "MyTableName";
public void ToDataBase(ListAction incomingAction, TrackingDbEntry dbEntry = null)
{
if (dbEntry == null)
{
Exception ex = new Exception("dbEntry can not be null");
throw ex;
}
// Open database (or create if not exits)
using (var db = new LiteDatabase(dbFilename))
{
var backupListInDB = db.GetCollection<TrackingDbEntry>(dbItemsTableName);
//ovverride action if needed
if (incomingAction == ListAction.Add)
{
var tempone = backupListInDB.FindOne(p => p.ProductID == dbEntry.ProductID);
if (backupListInDB.FindOne(p => p.ProductID == dbEntry.ProductID) != null)
{
//the record already exists
incomingAction = ListAction.Update;
//IOException ex = new IOException("Err: Duplicate. " + dbEntry.ProductID + " is already in the database.");
//throw ex;
}
else
{
//the record does not already exist
incomingAction = ListAction.Add;
}
}
switch (incomingAction)
{
case ListAction.Add:
backupListInDB.Insert(dbEntry);
break;
case ListAction.Remove:
//backupListInDB.Delete(p => p.FileOrFolderPath == backupItem.FileOrFolderPath);
if (dbEntry.ProductID != 0)
{
backupListInDB.Delete(dbEntry.ProductID);
}
break;
case ListAction.Update:
if (dbEntry.ProductID != 0)
{
backupListInDB.Update(dbEntry.ProductID, dbEntry);
}
break;
case ListAction.Disable:
break;
case ListAction.Enable:
break;
default:
break;
}
backupListInDB.EnsureIndex(p => p.ProductID);
// Use Linq to query documents
//var results = backupListInDB.Find(x => x.Name.StartsWith("Jo"));
}
}
}
}
我这样用:
DbInteractions yeah = new DbInteractions();
yeah.ToDataBase(ListAction.Add, new TrackingDbEntry { ProductID = dataBoundItem.ProductID, StoreID = dataBoundItem.StoreID, ChangeStatus = true });
抱歉......我的变量命名约定有时会爆炸......