Sql server 当列数据类型为';s与数据表绑定

Sql server 当列数据类型为';s与数据表绑定,sql-server,vb.net,datagridview,Sql Server,Vb.net,Datagridview,我的目标是: 创建每天有余额中断的银行余额系统 实际结果: 我可以从我的数据库中提取我想要的数据,计算余额,并用它填充数据网格 我需要的是: 我需要在每天的过渡中休息一下,这将告诉我一天的平衡 问题是: 如果我试图在“Valor”(十进制)列中输入一个字符串“Saldo”,它包含所有值,则会出现错误 我试图更改列“Valor”的“DataType”,但它说我不能更改填充列的数据类型 代码 这就是我想要的,它需要一些格式化的值,我达到了这个 将我的SQL“Valor”列数据类型更改

我的目标是:

  • 创建每天有余额中断的银行余额系统
实际结果:

  • 我可以从我的数据库中提取我想要的数据,计算余额,并用它填充数据网格
我需要的是:

  • 我需要在每天的过渡中休息一下,这将告诉我一天的平衡
问题是:

  • 如果我试图在“Valor”(十进制)列中输入一个字符串“Saldo”,它包含所有值,则会出现错误

  • 我试图更改列“Valor”的“DataType”,但它说我不能更改填充列的数据类型

代码

这就是我想要的,它需要一些格式化的值,我达到了这个 将我的SQL“Valor”列数据类型更改为varchar

这就是我现在看到的,这是“tabhistorico”数据网格

这是我的数据库


在适配器中将Valor强制转换为string,而不是更改基础表以适应Valor中的字符串,因此它是临时的。这使得表中的所有数据都是安全的,并且可供您拥有的任何其他程序使用,但仍然允许您在此处将其用作字符串并插入Saldo行。它在时间和内存方面也比在表中读取然后在表上执行复制和转换要高效得多。为此,请按如下方式在适配器中创建查询字符串:

SELECT Banco, Lancamento, Historico, Data
    , CONVERT(nvarchar(50),Valor) as Valor
    , Ordem 
FROM TAB_Movimentos 
WHERE Banco = @Banco 
ORDER BY Data ASC, Ordem ASC, Valor DESC, Histórico ASC
您可能还必须对非null数值列执行相同的操作,以使它们接受空格


请注意@Ohbowise指出,这也有同样的问题-您丢失了数字的格式,因为就DataGridView而言,它们不再是数字。您可能希望使用FORMAT()而不是CONVERT()(如果在您的SQL-SERVER版本中有此功能)

正如您所发现的,如果不键入varchar,则无法将字符串值添加到十进制列中,这会丢失货币格式。从理论上讲,在这个转换之后,您可以遍历列,解析十进制值,并添加货币格式。然后您可以将新行添加到这个新格式化的Valor列中。目前,我无法测试它以确定。或者,你可以。我的建议是用C#而不是VB,但我发现这很有用。太棒了,我也在找它。谢谢
SELECT Banco, Lancamento, Historico, Data
    , CONVERT(nvarchar(50),Valor) as Valor
    , Ordem 
FROM TAB_Movimentos 
WHERE Banco = @Banco 
ORDER BY Data ASC, Ordem ASC, Valor DESC, Histórico ASC