如何从MySQL中读取双列并将其分配给C#双变量?

齐格弗里德

我在读取数据库时遇到问题。到目前为止,我确信当我从MySQL读取一些双精度数(它们存储为双精度数而不是string / varchar)时,它们以小数点分隔符的形式返回。(10.5)。但是现在我注意到,实际上,他们以昏迷状态返回了吗?

我最近(一个月前)创建了一个新表,但是现在我注意到它的双精度值返回的是逗号,而不是点.

我检查了一下,这些表都在uff8_unicode_ci中。

我不明白,因为我确定,无法在MySQL中使用它,因此也检查了该链接

注意:这可能是由于我使用多台计算机进行测试,有些是法语,有些是俄语吗?

编辑:

要编辑表,请执行以下操作:

string request = "UPDATE [vegasteel].consumables SET ID_MACHINE=" + this.idMachine + ",GROUPE="PLASMA",TYPE=\'\',DETAIL=\'14\',SPEED=10.5,TIME=5.5,COST=0.5 WHERE ID=" + this.id;
DataBase.Update(request);

然后阅读:

if (this.OpenConnection() == true)
{
    IDataReader dataReader = ExecuteReader(query);
    while (dataReader.Read())
    {
        Consumable consumable = new Consumable();
        consumable.ID = Convert.ToInt64(dataReader["ID"].ToString());
        consumable.IdMachine = Convert.ToInt64(dataReader["ID_MACHINE"].ToString());
        consumable.Groupe = dataReader["GROUPE"].ToString();
        consumable.Type = dataReader["TYPE"].ToString();
        consumable.Detail = dataReader["DETAIL"].ToString();
        if(consumable.Groupe=="PLASMA")
        {
            string toto = "";
        }
        consumable.Speed = Global.ConvertToDouble(dataReader["SPEED"].ToString());
        consumable.Time = Global.ConvertToDouble(dataReader["TIME"].ToString());
        consumable.Cost = Global.ConvertToDouble(dataReader["COST"].ToString());
        list.Add(consumable);
    }
    this.CloseConnection();
}

Global.ConvertToDouble是我针对当前区域性添加逗号或点的功能。但是问题是当我阅读它时,dataReader [“ COST”]等于0,5,而不是0.5

编辑2:

如所要求的,这里是Global.ConvertToDouble函数,但是正如我所解释的那样,问题出在该函数之前,因为该函数使用逗号而不是点发送。

public static double ConvertToDouble(this string strToParse, char decimalSymbol = '.')
{
    if (strToParse.Contains('E'))
    {
        strToParse = "0";
    }
    string tmp = Regex.Match(strToParse, @"([-]?[0-9]+)([\s])?([0-9]+)?[." + decimalSymbol + "]?([0-9 ]+)?([0-9]+)?").Value;

    if (tmp.Length > 0 && strToParse.Contains(tmp))
    {
        var currDecSeparator = System.Windows.Forms.Application.CurrentCulture.NumberFormat.NumberDecimalSeparator;

        tmp = tmp.Replace(".", currDecSeparator).Replace(decimalSymbol.ToString(), currDecSeparator);
        return double.Parse(tmp);
    }

    return double.NegativeInfinity;
}
它在那里

应该将列转换为字符串然后进行解析。您应该直接阅读它们的类型。

consumable.Speed = (double) dataReader["SPEED"];

要么

consumable.Speed = Convert.ToDouble(dataReader["SPEED"]);

注意事项null处理

(感谢@mjwills提到这一点)

来自数据库的结果可能包含空值,并且有多种方法可以处理结果中的空值IDataReader(您可以看到SQL数据读取器-处理空列值从IDataReader获取值或搜索更广泛的网络的空安全方法)。

例如nulldouble当返回值为null时,您将需要确定是否要使用默认值(对于,则为0 )。

为了帮助您入门,这里提供了一个辅助方法(可以轻松地将其更改为扩展方法,甚至可以将其设为通用方法,以便您可以处理ints和其他类型)。

public static double GetNotNullExample(IDataReader reader, string colName, double valueIfNull)
{
    var colIndex = reader.GetOrdinal(colName);
    if (!reader.IsDBNull(colIndex))
        return reader.GetDouble(colIndex);
    else
        return valueIfNull;
}

发生了什么

重新安装计算机后,区域性已更改。下面的代码片段显示了文化对ToString方法的影响。

double pie = 3.14; // ;)

CultureInfo.CurrentCulture = new CultureInfo("en-US", false);
Console.WriteLine(pie.ToString());
Console.WriteLine(pie.ToString(CultureInfo.InvariantCulture));

CultureInfo.CurrentCulture = new CultureInfo("ru-RU", false);
Console.WriteLine(pie.ToString());
Console.WriteLine(pie.ToString(CultureInfo.InvariantCulture));

输出量

3.14
3.14
3,14
3.14

但是我还是想ToString()然后解析

  1. 别。

  2. 如果要继续使用ToString()-> Parse方法,则必须确保使用调用ToString InvariantCuture

consumable.Speed = Global.ConvertToDouble(dataReader["SPEED"]
                   .ToString(CultureInfo.InvariantCulture));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从输入中读取整数并将其分配给变量

如何从文件中读取数组并将其分配给变量?

如何从 URL 读取 JSON 文件并将其分配给 NodeJS 中的全局变量?

如何在c#中拆分特定格式的字符串并将其分配给变量?

如何读取键盘输入并将其分配给局部变量?

读取输入框中的值并将其分配给变量进行加密和解密

春天如何读取文件并将其分配给ArrayList?

从文本中获取值并将其分配给变量

从数组中调用元素并将其分配给变量?

VB.Net列出MySQL中的所有用户并将其分配给变量

选择单个 MYSQL 列中的最新条目并将其分配给 php 变量

如何从转义闭包中获取值并将其分配给变量并显示在 tableview 中

如何将sql查询的结果分配给变量并将其用于内置函数中?

如何解析JSON信息然后选择信息并将其分配给Swift中的变量

如何获取活动按钮的ref属性并将其分配给vue.js中的变量

在Makefile中,如何获取git commit哈希并将其分配给变量?

如何从字符串中提取单词并将其分配给Python 3.7中的变量?

您如何从html文本框中获取输入并将其分配给javascript变量?

如何查找文件的大小并将其分配给UNIX中的变量

C#-从JSON响应中获取值并将其分配给变量

返回字符串数组并将其分配给C中的变量

C。从文件中扫描行的特定部分,并将其分配给某个变量

如何从文本文件中读取变量并将其值使用Shell脚本分配给其他变量

如何读取json文件并将值分配给shell中的变量

如何在bash中逐行读取并将值分配给变量

如何编写动态数量的行并将其分配给C中的数组

在C#中返回字典值而不将其分配给变量?

如何使用awk从文件中读取矩阵并将其分配给bash脚本中声明的二维数组

在C中取消引用变量并将其地址分配给指针变量有什么区别?