【发布时间】:2020-05-29 15:00:11
【问题描述】:
我有这个问题。
SELECT DISTINCT
nome as Nome, Cognome As Cognome, DataConsegna as Data,
'RichiesteAttrezzatura' [Tipo Richiesta]
FROM
RichiesteAttrezzatura
UNION
SELECT DISTINCT
nome AS Nome, Cognome as Cognome, DataConsegna as Data,
'RichiesteMateriali' [Tipo Richiesta]
FROM
RichiesteMateriali
UNION
SELECT DISTINCT
nome AS Nome, Cognome as Cognome, giorno AS Data,
'RichiesteVestiario' [Tipo Richiesta]
FROM
RichiesteVestiario
如标题所示,问题是当我执行它时它在 SQL Server 中工作,但是当我在 C# 中尝试时它只返回一个空表。
根据我在网上和这个论坛上的理解,问题出在单引号上。
这是我的功能
adonet db;
DataProvider()
{
db = new adonet();
db.CreaConnessione();
}
public DataTable getRichiesteForDGV(int id)
{
DataTable dt = new DataTable();
string richiesteVestiario = "RichiesteVestiario";
string richiesteMateriali = "RichiesteMateriali";
string richiesteAttrezzatura = "RichiesteAttrezzatura";
string sql = "SELECT DISTINCT nome as Nome, Cognome As Cognome, DataConsegna as Data, '" + richiesteAttrezzatura + "' [Tipo Richiesta] FROM RichiesteAttrezzatura " +
"UNION SELECT DISTINCT nome AS Nome, Cognome as Cognome, DataConsegna as Data, '" + richiesteMateriali + "' [Tipo Richiesta] FROM RichiesteMateriali " +
"UNION SELECT DISTINCT nome AS Nome, Cognome as Cognome, giorno AS Data, '" + richiesteVestiario + "' [Tipo Richiesta] FROM RichiesteVestiario";
db.EseguiQueryWithParams(sql, new SqlParameter("@id", id));
return dt;
}
public DataTable EseguiQueryWithParams(string sql, params SqlParameter[] parameters)
{
ApriConnessione();
string nometab = "dump";
cmd.CommandText = sql;
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddRange(parameters);
try
{
adp = new SqlDataAdapter(cmd);
if (dset.Tables[nometab] != null)
dset.Tables[nometab].Clear();
adp.Fill(dset, nometab);
DataTable d = dset.Tables[nometab];
//d.Columns;
return d;
}
catch (Exception e)
{
throw e;
//throw new System.Exception("Errore nella lettura della tabella");
}
finally
{
adp.Dispose();
cmd.Dispose();
ChiudiConnessione();
}
}
感谢任何帮助。我已经更新了帖子,因为我知道问题出在我的 C# 上
【问题讨论】:
-
你的代码在哪里?
-
SQL Server 不会关心查询是在 C# 中还是在 SQL Server Management Studio 中执行的。第一个查询应该在任何地方都可以工作,如果没有,那么问题不在 SQL Server 部分,而是在 C# 部分。向我们展示用于执行它的 C# 代码。第二个查询 OTOH 不是有效的 SQL。 PS:顺便说一句,你可以去掉 DISTINCT,因为 UNION 总是删除重复的,否则你应该使用 UNION ALL。
-
为什么要在 SQL 语句中注入值? 参数.
-
您将忽略 EseguiQueryWithParams 的结果并返回您在 getRichiesteForDGV 开始时创建的(空)数据表
-
“感谢任何帮助。” - 学习调试。获取实际发送的 SQL 字符串。看看这是否适用于 SSMS。哦,也许——只是也许——告诉我们这个错误。
标签: c# asp.net sql-server