填充数据集时,SQL DataAdapter 删除 # 字符并连接值(例如,10#1000 变为 101000)

问题描述 投票:0回答:1

我正在使用存储过程来获取 C# 应用程序中的数据。当直接在 SQL Server 中执行时,SQL 查询返回正确的值,但是当我使用 SqlDataAdapter 填充 DataSet 时,输出值从 10#1000 更改为 101000。看起来 # 字符被删除并且值被连接。数据库表列的值如下:

CancelChargesStep1  | CancelChargesStep2    | CancelChargesStep3
------------------------------------------------------------------
10#1000             | 20#500                | 30#250

这是我的 C# 代码的简化版本:

`SqlCommand sqlComm = new SqlCommand("MyStoredProcedure", sqlConn);
sqlComm.CommandType = CommandType.StoredProcedure;

SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
DataSet ds = new DataSet();
da.Fill(ds);`

我尝试将 SQL 查询中的列转换为 VARCHAR 或 NVARCHAR,以确保这些值被视为字符串:

SELECT  CAST(CancelChargesStep1 AS VARCHAR(50)) AS CancelChargesStep1 FROM MyTable;

c# .net dataset sqldataadapter
1个回答
0
投票

我没有发现你的工作有任何错误。我将全面介绍 SQL Server 中从数据定义到数据检索的解决方案。最后用c#进行前端编码。

  1. 表的数据定义将是。
CREATE TABLE TEST1
(CancelChargesStep1 VARCHAR(50), 
CancelChargesStep2 VARCHAR(50), 
CancelChargesStep3 VARCHAR(50));
  1. 然后向表中插入数据
INSERT INTO Test1(CancelChargesStep1 , CancelChargesStep2 , CancelChargesStep3) 
VALUES
('10#1000','20#500','30#250');
  1. 获取数据的存储过程
CREATE PROCEDURE  DRL_TEST
AS
SELECT CancelChargesStep1 , CancelChargesStep2 , CancelChargesStep3 FROM TEST1
RETURN;

以上三个步骤已经在SQL Server 2014 Express中实现了

  1. 我遵循你的 c# 代码。没有变化。只需添加最后一行即可在数据网格中查看结果。你可以忽略它。

此c#代码已在VS2022上的.Net Framework 4.7中实现。

SqlConnection sqlConn = new SqlConnection(MyConnectionString);
SqlCommand sqlComm = new SqlCommand("DRL_TEST", sqlConn);
sqlComm.CommandType = CommandType.StoredProcedure;

SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource= ds.Tables[0];

 

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.