Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Visual Studio(C#)更改SQL Server中表的数据类型_C#_Sql Server_Currency_Nvarchar - Fatal编程技术网

通过Visual Studio(C#)更改SQL Server中表的数据类型

通过Visual Studio(C#)更改SQL Server中表的数据类型,c#,sql-server,currency,nvarchar,C#,Sql Server,Currency,Nvarchar,通过Visual Studio(C#)更改SQL Server中表的数据类型 上下文 我有一个网络刮板,每天早上我都用它从各种网站上(通过自动任务)拉取数据 然后,每个scraper项目创建一个单独的SQL Server表,并用提取的数据填充该表 问题 我的问题是web scraper将只使用nvarchar(4000)作为每个列的数据类型 我需要使用C代码中自动生成的表中的数据 有问题的列(请再次记住,此表是由web scraper自动生成的)是一致的,并且包含看起来像“$12.34”的

通过Visual Studio(C#)更改SQL Server中表的数据类型

上下文

  • 我有一个网络刮板,每天早上我都用它从各种网站上(通过自动任务)拉取数据

  • 然后,每个scraper项目创建一个单独的SQL Server表,并用提取的数据填充该表

问题

  • 我的问题是web scraper将只使用
    nvarchar(4000)
    作为每个列的数据类型

  • 我需要使用C代码中自动生成的表中的数据

  • 有问题的列(请再次记住,此表是由web scraper自动生成的)是一致的,并且包含看起来像“$12.34”的数据

  • 当我使用数据时,我需要将“$12.34”设置为十进制(或其他数字格式),以便与其他数值进行比较

尝试过

  • 我的第一个想法是简单地执行一个
    转换.ToDecimal(myDecimalStringNum)
    ,但这会抛出一个
    系统.FormatException

  • 我还尝试了
    Decimal.Parse
    ,以防这是一个文化问题;同样的结果

  • 我尝试通过编程(从VB或C#)将列数据类型从
    nvarchar
    更改为
    decimal
    ,但没有成功。顺便说一句,我甚至无法在SSMS中将数据类型从
    nvarchar
    更改为
    decimal

  • 使用SSMS将列的数据类型从
    nvarchar(4000)
    更改为money。从货币数据类型中,我可以成功地使用
    Convert.ToDecimal

问题

问题是,C#没有“money”数据类型,我可以使用它将SQL Server中的列更改为
money
。所有的web抓取、SQL Server表生成以及使用这些表的C#程序每天早上都需要自动运行


我已经完成了99%的工作,我只需要一个可以添加到我的自动化工作流程中的解决方案。到目前为止,这看起来像是找到了一种方法来自动将自动生成的表的列数据类型从
nvarchar(4000)
更改为SSMS中的money,但我愿意接受其他建议

如果您可以控制从表中读取的SQL,则可以在SQL查询中使用convert:

select CONVERT(money, '$123.34')

将“$123.34”替换为您的列。那么C#应该能够将其用作十进制。

如果您可以控制从表中读取的SQL,那么您可以在SQL查询中使用convert:

select CONVERT(money, '$123.34')

将“$123.34”替换为您的列。那么C#应该可以将其用作十进制。

我知道这是一篇老文章,你现在已经明白了这一点,但是如果你需要用C#进行转换,我会首先做一个:

myDecimalStringNum = myDecimalStringNum.Replace("$","");
然后像最初一样进行转换:

var newDecimalStringNum = Convert.ToDecimal(myDecimalStringNum);

我知道这是一篇老文章,你现在已经明白了这一点,但是如果你需要在C#中进行转换,我会首先做一个:

myDecimalStringNum = myDecimalStringNum.Replace("$","");
然后像最初一样进行转换:

var newDecimalStringNum = Convert.ToDecimal(myDecimalStringNum);
在C语言中,你可以使用
decimal.Parse($12.34),NumberStyles.Currency,newcultureinfo(“en-us”)。您应该指定NumberStyle和FormatProvider。在C语言中,您可以使用
decimal.Parse($12.34),NumberStyles.Currency,new CultureInfo(“en-us”)。您应该指定NumberStyle和FormatProvider。