我向assess里循环插入数据,如我我加上断点F10单步运行,不报错误,插入无误。可如果我不加断点直接运行,也不会报错,可就是总会少了第1条记录。我实在无奈了。大家有没有遇到过相同问题,帮帮忙
解决方案 »
- ext-4.0.7 下载下来后,本地api打开不了
- C#数据库连接出错 未处理的SqlException 急急急
- C#有些句子看不懂
- 快来吧,一个计算机图形+数学的比较困难的问题
- 关于WinForm里一个Form的重用问题
- 沉寂了2年半,终于找到工作了。高兴的呜呜的哭,散分庆祝。
- (求助)C#编译的东西在别人电脑里不能运行那C#有什么用啊
- 打包时遇到的几个小问题。顶都有分
- 请问如何获得 numlock capslock insert 状态?
- 有关windows服务:如何在onStart里定时弹出一个Form?
- 几十万客户端一台服务器实现数据的传输文件的传送
- .Net serialport类读取串口数据
{
OpenFileDialog openfile = new OpenFileDialog();
openfile.RestoreDirectory = true;
openfile.Multiselect = false;
openfile.InitialDirectory = "";
openfile.Filter = "TXT文件(*.txt)|*.txt";
openfile.FilterIndex = 1;
if (openfile.ShowDialog() == DialogResult.OK)
{
//获取文件路径
string localFilePath = openfile.FileName.ToString();
//获取文件名
string fileName = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1, (openfile.FileName.Length - openfile.FileName.LastIndexOf("\\") - 5));
//获取文件路径,不带文件名
string FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\") + 1);
//创建MDB文件
string dbName = FilePath + fileName + ".mdb";
ADOX.CatalogClass cat = new ADOX.CatalogClass();
try
{
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"); }
catch (Exception)
{ MessageBox.Show("该记录已存在!!");
this.Dispose();
}
ADOX.TableClass tbl = new ADOX.TableClass();
tbl.ParentCatalog = cat;
tbl.Name = fileName;
ADOX.ColumnClass col = new ADOX.ColumnClass();
col.ParentCatalog = cat;
col.Type = ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型
col.Name = "id";
col.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
col.Properties["AutoIncrement"].Value = true;
tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0);
//读取txt文件
StreamReader objReader = new StreamReader(openfile.FileName.ToString(), System.Text.Encoding.Default);
string sLine = "";
List<string> listLine = new List<string>();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null)
{
listLine.Add(sLine);
}
}
objReader.Close();
//添加字段
string strZiduan = "";
if (listLine[0] != null || listLine[0] != "")
{
string strLing = listLine[0];
string[] data = strLing.Split(',');
for (int j = 0; j < data.Length; j++)
{
ADOX.ColumnClass col2 = new ADOX.ColumnClass();
col2.ParentCatalog = cat;
col2.Name = "字段" + (j + 1).ToString();
strZiduan = strZiduan + "字段" + (j + 1).ToString() + ",";
col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 100);
}
}
//设置主键
tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "");
cat.Tables.Append(tbl);
tbl = null;
cat = null;
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName; for (int x = 0; x < listLine.Count; x++)
{
string[] data1 = listLine[x].Split(',');
string strValues = string.Empty;
for (int z = 0; z < data1.Length; z++)
{
strValues += "'" + data1[z] + "'" + ",";
}
string subStr = strValues.Substring(0, strValues.Length - 1);
OleDbConnection connection = new OleDbConnection(ConnectionString);
connection.Open();
string sql = "insert into " + fileName + "(" + strZiduan.Substring(0, strZiduan.Length - 1) + ") values(" + strValues.Substring(0, strValues.Length - 1) + ")";
OleDbCommand conn = new OleDbCommand(sql, connection);
conn.ExecuteNonQuery();
connection.Close();
}
MessageBox.Show("转换成功!!");
this.Dispose();
}
}
我做的这是一个txt文件转换成mdb文件的程序。到最后的两个for循环出的问题,大家麻烦都帮忙看看
for (int x = 0; x < listLine.Count; x++)
for (int z = 0; z < data1.Length; z++)确认数据到这里已得到你想要的实际长度了没?
还有,建议把for循环置如下:
using(OleDbConnection connection = new OleDbConnection(ConnectionString))
{
connection.Open();
StringBuilder sb =new StringBuilder();
for(int ....){
sb.appendLine("");
}
OleDbCommand conn = new OleDbCommand(sb, connection);
conn.ExecuteNonQuery();
}
把connection.Close();放在for循环结束之后。
这两句不要放在for循环内部。
我猜测反复开关数据库连接造成的不同步。只是猜测,还希望楼主尝试一下。
OleDbConnection connection = new OleDbConnection(ConnectionString);
connection.Open();
放在for循环之上,把
connection.Close();
放在for循环之后,是绝对没问题的,而且不影响for循环的执行。调试运行和不调试运行的差别在于:(我猜测)不调试执行时,有可能出现并发的情况。open和close并发执行造成问题。