我遇到SQL查询问题:
using (SqlConnection conn = new SqlConnection("user id=user;" + "password=pass;" + "server=server;" + "database=db;"))
{
using (SqlCommand comm = new SqlCommand(@"SELECT COUNT(*) FROM [CompaniesDB].[dbo].[Companies] WHERE BolagsID = '" + BolagsID + "'"))
{
conn.Open();
comm.Connection = conn;
MessageBox.Show("TEST: {0}", Convert.ToString((int)comm.ExecuteScalar()));
}
}
我希望在消息框中输入一个int来表示BolagsID
出现的行数。但我每次都得0。我在SQL Server Management Studio中尝试了这个查询,它在那里工作得很好。我做错了什么/错过了什么?
编辑:
这样可行,但现在我不知道如何参数化值:
string query = @"SELECT COUNT(*) FROM [CompaniesDB].[dbo].[Companies] WHERE BolagsID = " + BolagsID;
ADODB.Connection conn2 = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset();
string strConn = "Provider=...;Data Source=...;Database=...;User Id=...;Password=...";
conn2.Open(strConn);
rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic;
rs.Open(query, conn2);
if (rs.Fields[0].Value > 0)
...stuff...
答案 0 :(得分:2)
string query = @"SELECT Count(*) FROM [CompaniesDB].[dbo].[Companies] WHERE BolagsID = @BolagsID";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@BolagsID", SqlDbType.NVarChar).Value = BolagsID;
conn.Open();
MessageBox.Show("TEST: {0}", Convert.ToString((int)cmd.ExecuteScalar()));
conn.Close();
}
如果查询中出现错误,基本上会返回0,因此即使SSMS足够智能解析它,也不会执行sql命令。
确保其他一切正常工作的快捷方法是将查询更改为“SELECT Count(*)FROM [CompaniesDB]。[dbo]。[公司]”。如果这不起作用,则问题可能在于您的数据库连接(权限?)或其他。
答案 1 :(得分:0)
尝试分配SELECT COUNT(*)FROM [CompaniesDB]。[dbo]。[公司] WHERE BolagsID ='“+ BolagsID +”'“到字符串str如下
string str =@"SELECT COUNT(*) FROM [CompaniesDB].[dbo].[Companies] WHERE BolagsID = '" + BolagsID + "'";
using (SqlConnection conn = new SqlConnection("user id=user;" + "password=pass;" + "server=server;" + "database=db;"))
{
using (SqlCommand comm = new SqlCommand(str))
{
conn.Open();
comm.Connection = conn;
MessageBox.Show("TEST: {0}", Convert.ToString((int)comm.ExecuteScalar()));
}
}
然后在str的值上执行watch / quickwatch以获取正在运行的确切查询,然后在Sql Managment studio中运行相同的查询。如果你在Sql Management Studio中得到0,那么问题是数据不存在。
答案 2 :(得分:0)
在尝试完全不同的方法之前,我尝试了很多东西。这给了我想要的结果:
string query = @"SELECT COUNT(*) FROM [CompaniesDB].[dbo].[Companies] WHERE BolagsID = " + BolagsID;
ADODB.Connection conn2 = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset();
string strConn = "Provider=...;Data Source=...;Database=...;User Id=...;Password=...";
conn2.Open(strConn);
rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic;
rs.Open(query, conn2);
if (rs.Fields[0].Value > 0)
...stuff...
请注意,连接和记录集都在此代码段之外关闭。