C# 如果列不是数字,则从datatable中删除行
我有一个带有几列的数据表。第一列是我们的员工id。不幸的是,并非所有的行都是数字,我们希望删除那些不是数字的行。例如,我们有一行有“@#$”,我想删除这样的行。我目前有以下代码C# 如果列不是数字,则从datatable中删除行,c#,datatable,dataset,row,C#,Datatable,Dataset,Row,我有一个带有几列的数据表。第一列是我们的员工id。不幸的是,并非所有的行都是数字,我们希望删除那些不是数字的行。例如,我们有一行有“@#$”,我想删除这样的行。我目前有以下代码 var len = dt.Rows.Count; for(int y = 0; y < len; y++) { var mwd = dt.Columns[0].ToString(); bool valid = int.T
var len = dt.Rows.Count;
for(int y = 0; y < len; y++)
{
var mwd = dt.Columns[0].ToString();
bool valid = int.TryParse(mwd, out int n);
if (valid)
{
log.LogInformation("mwd is numeric");
}
else
{
log.LogInformation("mwd is not numeric");
dt.Rows[y].Delete();
}
}
var len=dt.Rows.Count;
对于(int y=0;y
但是,这不会删除该行。我做错了什么?提前谢谢
编辑:周围代码
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string[] columns = { "Mwd", "Naam", "Kostenplaats Externe id (Klant)", "Kostenplaats Loonlijstcode (Activiteit)", "Kostenplaats Naam (Activiteit)", "Datum", "Uren ruw", "Ber. Uren", "Verlof volledig pad" };
foreach (string column in columns)
{
dt.Columns.Add(column);
}
using (StreamReader reader = new StreamReader(req.Body))
{
while (reader.EndOfStream == false)
{
string[] rows = reader.ReadLine().Split(',');
DataRow dr = dt.NewRow();
for (int i = 0; i < columns.Length; i++)
{
var temp = rows[i].Trim('"');
dr[i] = temp.Trim('\'');
}
dt.Rows.Add(dr);
}
}
for (int i = 0; i < dt.Rows.Count; i++)
{
foreach (DataColumn column in dt.Columns)
{
var mwd = dt.Rows[i][column].ToString();
int n;
bool valid = int.TryParse(mwd, out n);
if (valid)
{
log.LogInformation("mwd is numeric");
}
else
{
log.LogInformation("mwd is not numeric");
dt.Rows[i].Delete();
i--;
break;
}
}
}
dt.AcceptChanges();
log.LogInformation(dt.ToString());
for (int x = 0; dt.Rows.Count > x; x++)
{
string sql = "INSERT INTO dbo.kronos (Mwd, Naam, KostenplaatsExterneIdKlant, KostenplaatsLoonlijstcodeActiviteit, KostenplaatsNaamActiviteit, Datum, UrenRuw, BerUren, VerlofVolledigPad)" +
" VALUES ('" + dt.Rows[x]["Mwd"].ToString() + "', '" + dt.Rows[x]["Naam"].ToString() + "', '"
+ dt.Rows[x]["Kostenplaats Externe id (Klant)"].ToString() + "', '" + dt.Rows[x]["Kostenplaats Loonlijstcode (Activiteit)"].ToString() + "', '"
+ dt.Rows[x]["Kostenplaats Naam (Activiteit)"].ToString() + "', '" + dt.Rows[x]["Datum"].ToString() + "', '"
+ dt.Rows[x]["Uren ruw"].ToString() + "', '" + dt.Rows[x]["Ber. Uren"].ToString() + "', '" + dt.Rows[x]["Verlof volledig pad"].ToString() + "')";
var str = Environment.GetEnvironmentVariable("ConnectionString");
using (SqlConnection connection = new SqlConnection(str))
{
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
command.ExecuteNonQuery();
}
}
return result;
DataSet ds=新数据集();
DataTable dt=新的DataTable();
字符串[]列={“Mwd”、“Naam”、“Kostenplaats外部id(Klant)”、“Kostenplaats Loonlijstcode(Activiteit)”、“Kostenplaats Naam(Activiteit)”、“Datum”、“Uren ruw”、“Ber.Uren”、“Verlof volledig pad”};
foreach(列中的字符串列)
{
dt.Columns.Add(列);
}
使用(StreamReader=新StreamReader(请求正文))
{
while(reader.EndOfStream==false)
{
string[]rows=reader.ReadLine().Split(',');
DataRow dr=dt.NewRow();
for(int i=0;ix;x++)
{
字符串sql=“插入dbo.kronos(Mwd、Naam、KostenplatsExterneidKlant、KostenplatsLoonLijstCodeActiviteit、KostenplatsNaamaActiviteit、Datum、UrenRuw、BerUren、VerlofVolledigPad)”+
“值('”+dt.Rows[x][“Mwd”].ToString()+”,'“+dt.Rows[x][“Naam”].ToString()+”,”
+dt.Rows[x][“Kostenplaats外部id(Klant)”].ToString()+“,”+dt.Rows[x][“Kostenplaats Loonlijstcode(Activiteit)”].ToString()+“,”
+dt.Rows[x][“Kostenplaats Naam(活动)”].ToString()+“,”+dt.Rows[x][“基准”]。ToString()+“,”
+dt.Rows[x][“Uren ruw”].ToString()+”,“+dt.Rows[x][“Ber.Uren”].ToString()+”,“+dt.Rows[x][“Verlof volledig pad”].ToString()+”;
var str=Environment.GetEnvironmentVariable(“ConnectionString”);
使用(SqlConnection=newsqlconnection(str))
{
SqlCommand=新的SqlCommand(sql,连接);
connection.Open();
command.ExecuteNonQuery();
}
}
返回结果;
试试这段代码
for (int i = 0; i< dt.Rows.Count;i++)
{
foreach (DataColumn column in dt.Columns)
{
var mwd = dt.Rows[i][column].ToString();
int n;
bool valid = int.TryParse(mwd, out n);
if (valid)
{
log.LogInformation("mwd is numeric");
}
else
{
log.LogInformation("mwd is not numeric");
dt.Rows[i].Delete();
i--;
break;
}
}
}
dt.AcceptChanges();
for(int i=0;i
如果您知道列或其索引的名称,请使用以下代码
for (int i = 0; i < dt.Rows.Count; i++)
{
var mwd = dt.Rows[i]["Name"].ToString();
//or---------------------------------
var mwd = dt.Rows[i][index].ToString();
int n;
bool valid = int.TryParse(mwd, out n);
if (valid)
{
log.LogInformation("mwd is numeric");
}
else
{
log.LogInformation("mwd is not numeric");
dt.Rows[i].Delete();
i--;
}
}
dt.AcceptChanges();
for(int i=0;i
Delete仅将该行标记为Datatable中已删除的行。这对数据库没有影响。该行保留在Datatable中。如果要从Datatable中删除标记为删除的行,则需要在循环退出时调用AcceptChanges。从数据库中删除需要调用适配器更新方法或通过db进行单次调用这是有道理的,但它仍然没有删除它。它仍然给我错误:无法转换”@#$“到int
在哪一行?Int.TryParse在此不应给出例外情况。这适用于第一行。在这种情况下,它的值是错误的,因此它是正确的。但当它再次进入循环时,它会说:此行已从表中删除,并且没有任何数据。BeginEdit()将允许在此行中创建新数据。
使用break。现在我已经修改了代码。再次复制并测试代码当唯一应测试的列是索引0处的列时,循环列的目的是什么?对此我很抱歉,但现在我得到了错误:集合已修改;枚举操作可能无法执行
Sorry。我修改了密码。作品我测试过了。我没有测试之前的测试。