【发布时间】:2018-05-16 10:12:35
【问题描述】:
我有这样的代码:
private bool CheckDatabase(string databaseName, bool bRet)
{
string connString = "Server=localhost\\SQLEXPRESS;Integrated Security=SSPI;database=master";
string cmdText = "select * from master.dbo.sysdatabases where name=\'" + databaseName + "\'";
using (SqlConnection sqlConnection = new SqlConnection(connString))
{
sqlConnection.Open();
using (SqlCommand sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
int nRet = sqlCmd.ExecuteNonQuery();
// regMessage.Text = nRet.ToString();
if (nRet <= 0)
{
bRet = false;
}
else
{
bRet = true;
}
}
}
return bRet;
}
然而
nRet
结果总是-1,就好像数据库不存在(确实存在)。 是因为数据库是空的吗? 或者如果创建了数据库,它是否应该返回 >0,即使它是空的? 顺便说一句,字符串 databaseName 是正确的。
编辑> 编辑: 我在“CREATE DATABASE @database”ssql 命令上也遇到了意外错误:
''@userDatabase' 附近的语法不正确
代码是这样的:
var connString = "Server=localhost\\SQLEXPRESS;Integrated Security = SSPI; database = master";
string cmdText = "CREATE DATABASE @userDatabase";
using (var sqlConnection = new SqlConnection(connString))
{
using (var sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
sqlCmd.Parameters.Add("@userDatabase", System.Data.SqlDbType.NVarChar).Value = databaseName;=
sqlConnection.Open();
sqlCmd.ExecuteNonQuery();
}
}
【问题讨论】:
-
ExecuteNonQuery 不适用于 SELECT 语句(或者更好的是它不会从选择中返回任何内容)
-
这里是我获取代码的地方:social.msdn.microsoft.com/Forums/en-US/…
-
小心小圆桌。
-
ExecuteNonQuery的 MSDN 文档指出:“对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入的表上存在触发器或更新后,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为-1 .如果发生回滚,返回值也是-1。” -
不,因为
ExecuteNonQuery将总是从任何不是 UPDATE、INSERT 或 DELETE 的东西中返回 -1。如果您的 SELECT 选择了 1,000 行,ExecuteNonQuery仍将返回 -1。
标签: c# sql sql-server database uwp