C#&;SQL Server存储过程不支持';t返回结果
我试图从数据库中获取一个zip文件,我编写了一个存储过程,如下所示C#&;SQL Server存储过程不支持';t返回结果,c#,sql-server,tsql,C#,Sql Server,Tsql,我试图从数据库中获取一个zip文件,我编写了一个存储过程,如下所示 [dbo].[p_SearchZipLocal] @zip nvarchar(10) = NULL, @city nvarchar(100) = null AS BEGIN SET NOCOUNT ON; BEGIN -- Verifica se o zip aparece na primeira coluna IF((SELECT COUNT(cttzip)
[dbo].[p_SearchZipLocal]
@zip nvarchar(10) = NULL,
@city nvarchar(100) = null
AS
BEGIN
SET NOCOUNT ON;
BEGIN
-- Verifica se o zip aparece na primeira coluna
IF((SELECT COUNT(cttzip)
FROM seur
WHERE cttzip = @zip) > 0)
BEGIN
-- Verifica se o valor é NA, se não for devolve o zip e a localidade correcta
IF((SELECT TOP(1) [SubCity1] as city
FROM seur
WHERE cttzip = @zip) = '#N/A')
BEGIN
-- Se for NA vamos ter de pesquisar na quinta coluna pela localidade
IF((SELECT count(*) FROM seur WHERE subCity2 LIKE @city + '%' )>0)
-- Se encontrar-mos devolvemos o novo zip
SELECT TOP(1)
'0' AS Error, subZip2 as zip, subCity2 AS city
FROM seur
WHERE subCity2 LIKE @city + '%'
ELSE
SELECT
'2' AS Error, 'Erro' AS zip, 'Erro' AS city
END
ELSE
SELECT TOP(1)
'0' AS Error, cttzip AS zip, [SubCity1] as city
FROM seur
WHERE cttzip = @zip
END
ELSE
SELECT '1' AS Error, 'Erro' AS zip, 'Erro' AS city
END
END
从SQL Server执行时返回结果,如下所示:
0 9900 AEROPORTO DA HORTA
但是当我从C#代码调用它时,它不会将结果返回到datatable
using (SqlCommand cmd = new SqlCommand("p_SearchZipLocal", connectionSQL))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@zip", SqlDbType.VarChar).Value = "9900";
cmd.Parameters.Add("@city", SqlDbType.VarChar).Value = "PRAIA DO ALMOXARIFE";
connectionSQL.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
}
此代码获取返回中的列名,但没有关联的值。谁能告诉我我的代码哪里错了吗?我会用。用DataAdapter填充 请看这个
数据表.Load方法要求基础数据中有一个主键列(即来自DataReader)。看起来您的过程没有任何主键列,或者如果您有主键列,请在sql语句中使用
order by
,并尝试将其保留为第一列,以便DataTable
能够将其接受为主键
这是DataTable.Load的一个非常老的问题,没有很好的文档记录。一般来说,
SQLDataAdapter
与DataTable
配合良好,但问题仍然存在。我想数据不会从sql存储过程->C传递过来,你能试试这样吗?//注释掉dt.Load(cmd.ExecuteReader());然后添加:SqlDataReader myReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);while(myReader.Read()){Console.WriteLine(myReader[“city”];}myReader.Close();每一点提示都能解决。感谢您的帮助小提示,在您的if
检查中,不要执行>0
或TOP(1)…=代码>使用存在(
这将导致更快的查询。另外,您的选择顶部(1)
部分我认为是错误的,您正在做一个顶部1,但没有顺序,这可能是错误的。您可能希望在那里存在另一个位置(我在链接的示例中这样做了)您的代码运行良好,并进行了一些微调。感谢您的帮助我不确定问题是否与不返回主键直接相关,但这是我添加到最终解决方案中的内容之一。感谢您的帮助