基本上我有一个C#Desktop应用程序,可以将数据从txt / csv文件上传到数据库中。我做了类似的事情:
OdbcConnection conn;
conn = new OdbcConnection(strConnString.Trim());
conn.Open();
sql_select = "select * from [" + this.csvFilePath.Trim() + "]";
我们的想法是让用户决定分隔符的内容,例如“;”或“,”或“#”,或其他......
因此,当分隔符是任何besisdes“,”时,应用程序运行良好...但是当我选择使用它时,我收到一个错误,告诉我字段分隔符与小数分隔符重合。
问题是,在我的位置,十进制的分隔符是“,”。我发现在控制面板上更改“。”的小数分隔符。而不是“,”使应用程序工作。
我的问题是,有没有办法让应用程序设置默认分隔符?
答案 0 :(得分:0)
请检查此问题,它可能会引导您找到解决方案:
How to fix an application that has a problem with decimal separator
正确的问题可能是TL; DR,但第一个答案与您的问题及其解决方案有关。您基本上将使用应用程序线程的CultureInfo class实例来使应用程序使用给定的文化。这样,您可以更改您正在使用的小数分隔符,而无需更改操作系统使用的分隔符。
据我所知,您可以提供自己的自定义文化,因此您可以将小数点分隔符设置为您喜欢的任何内容。
答案 1 :(得分:0)
虽然您可以使用API调用来设置操作系统的默认分隔符,但这可能会使用户烦恼。更好的选择是在文件字符串中的分隔符上运行查找和替换,将用户输入的分隔符更改为某个自定义分隔符(ASCII字符30是为此目的而设计的)。然后始终使用该自定义分隔符将数据解析到您的文件中。当然,之后不要将更改保存到文件中。
This page包含由ASCII标准定义的所有字符的列表。
答案 2 :(得分:0)
var yourCulture = new CultureInfo("EN-US");
yourCulture.NumberFormat.NumberDecimalSeparator = ";"; // an arbitrary separator
Thread.CurrentThread.CurrentCulture = yourCulture;
Console.WriteLine(1.5); // -> 1;5
Console.WriteLine(Convert.ToDouble("1;5") + 1); // -> 2;5
答案 3 :(得分:0)
这些解决方案都不适合我...即使我可以更改CurrentCulture,我仍然会收到错误“field delimiter = decimal delimiter”。
但是因为我很蠢,我忘了正确设置schema.ini。这就是我得到的:
private void writeSchema()
{
try
{
FileStream fsOutput = new FileStream(this.dirCSV + "\\schema.ini", FileMode.Create, FileAccess.Write);
StreamWriter srOutput = new StreamWriter(fsOutput);
string s1, s2, s3, s4, s5, s6, s7, s8;
s1 = "[" + this.FileNevCSV + "]";
s2 = "ColNameHeader=" + chkFirstRowColumnNames.Checked.ToString();
s3 = "Format=" + this.strFormat;
s4 = "MaxScanRows=25";
s5 = "CharacterSet=" + this.strEncoding;
s6 = "DecimalSymbol=.";
s7 = "CurrencyDecimalSymbol=.";
srOutput.WriteLine(s1.ToString() + "\r\n" + s2.ToString() + "\r\n" + s3.ToString() + "\r\n" + s4.ToString() + "\r\n" + s5.ToString() + "\r\n" + s6.ToString() + "\r\n" + s7.ToString());
srOutput.Close();
fsOutput.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "writeSchema");
}
finally
{ }
}
那该死的东西工作得很好。谢谢大家的帮助!