SQL C#双精度小数
我试图在一个已经转换的SQL更新语句中输入一个双精度值(参见代码1),以将他的数字保留在逗号后面 (一) (2) 将我的值放入SQL语句的过程中,我将natMB放入“Verbruikgegevens”索引位置2。0或1表示我输入的数据是否漫游。这是if语句的一部分,声明它是漫游数据或国家数据SQL C#双精度小数,c#,sql,double,decimal,C#,Sql,Double,Decimal,我试图在一个已经转换的SQL更新语句中输入一个双精度值(参见代码1),以将他的数字保留在逗号后面 (一) (2) 将我的值放入SQL语句的过程中,我将natMB放入“Verbruikgegevens”索引位置2。0或1表示我输入的数据是否漫游。这是if语句的一部分,声明它是漫游数据或国家数据 sqlStatementUpdate(TrafficdataID, 0, (Convert.ToDouble(Verbruikgegevens.Rows[intCount].ItemArray[2
sqlStatementUpdate(TrafficdataID, 0,
(Convert.ToDouble(Verbruikgegevens.Rows[intCount].ItemArray[2],
CultureInfo.InvariantCulture))
(3) Visual studio中的SQL语句(C#)
(4) 数据存取帮助器
internal static class DataAccessHelper
{
public static void AddParam(SqlCommand cmd, string columnName, SqlDbType dbType, object paramvalue)
{
if (paramvalue is DateTime)
{
if (((DateTime)paramvalue).Date == DateTime.MinValue.Date)
{
paramvalue = DBNull.Value;
}
}
if (paramvalue == null)
{
paramvalue = DBNull.Value;
}
string param = "@" + columnName;
if (!cmd.Parameters.Contains(param))
{
if (dbType == SqlDbType.VarChar || dbType == SqlDbType.NVarChar || dbType == SqlDbType.Char || dbType == SqlDbType.NChar)
cmd.Parameters.Add(param, dbType, 4000);
else
cmd.Parameters.Add(param, dbType);
cmd.Parameters[param].SourceColumn = columnName;
cmd.Parameters[param].Value = paramvalue;
}
}
public static DataSet ExecSProcDS(SqlCommand cmd)
{
DataSet ds = new DataSet();
try
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
}
catch (Exception ex)
{
throw (ex);
}
return ds;
}
(5) SQL语句
ALTER PROCEDURE [dbo].[SP_SCTrafficdataDetailUpdate] @TDDValue decimal, @TrafficdataID bigint, @TDDRoaming bit
AS
BEGIN
UPDATE TR_SCTrafficDataDetail
SET TDDValue = @TDDValue
WHERE (TDDType = 'Data') AND (TrafficDataID = @TrafficdataID) AND (TDDRoaming = @TDDRoaming)
END
问题:在将数据导入sqltable时,是否可能继续使用double,并将数字保留在逗号后面?现在好像没那么好用。。。我在SQLTable中将我的值定义为十进制,但问题是:
- 我有表示数字的文本输入,有时使用逗号,有时使用句点作为十进制分隔符。如何将这些数据可靠地转换为数字
只需创建一次,然后通过将值设置为新行中的值来重新使用它。只是别忘了将NULL设置为DBNull.Value。您的问题中似乎没有问题。。。无论如何,如果您使用数据库中的
Decimal
字段,我建议您使用C#中的Decimal
变量来保持兼容和/或避免舍入错误。小数是否会降低性能?您缺少一个问题。sql是否删除了您试图插入的数字的小数部分?十进制可能比双精度稍慢,但这实际上取决于您的问题是什么。你愿意为了准确性而放弃一些速度吗?处理10000条记录只需15分钟听起来好像你的整体设计有问题,我认为如果你修复了设计缺陷,你可以使用十进制,而不是一开始就有问题。对于速度问题。你的意思是定义它一次,然后调用另一个过程来更改命令中的变量?我认为它不会这样工作,我不会得到添加参数的超循环吗?创建SqlCommand时,只添加一次,将值设置为DBNull.value。然后说cmdObject.Parameters[“@paramName”].Value=valueVariable代码>
internal static class DataAccessHelper
{
public static void AddParam(SqlCommand cmd, string columnName, SqlDbType dbType, object paramvalue)
{
if (paramvalue is DateTime)
{
if (((DateTime)paramvalue).Date == DateTime.MinValue.Date)
{
paramvalue = DBNull.Value;
}
}
if (paramvalue == null)
{
paramvalue = DBNull.Value;
}
string param = "@" + columnName;
if (!cmd.Parameters.Contains(param))
{
if (dbType == SqlDbType.VarChar || dbType == SqlDbType.NVarChar || dbType == SqlDbType.Char || dbType == SqlDbType.NChar)
cmd.Parameters.Add(param, dbType, 4000);
else
cmd.Parameters.Add(param, dbType);
cmd.Parameters[param].SourceColumn = columnName;
cmd.Parameters[param].Value = paramvalue;
}
}
public static DataSet ExecSProcDS(SqlCommand cmd)
{
DataSet ds = new DataSet();
try
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
}
catch (Exception ex)
{
throw (ex);
}
return ds;
}
ALTER PROCEDURE [dbo].[SP_SCTrafficdataDetailUpdate] @TDDValue decimal, @TrafficdataID bigint, @TDDRoaming bit
AS
BEGIN
UPDATE TR_SCTrafficDataDetail
SET TDDValue = @TDDValue
WHERE (TDDType = 'Data') AND (TrafficDataID = @TrafficdataID) AND (TDDRoaming = @TDDRoaming)
END