Не работает запрос представления master.sys.databases в SQL Server 2008 R2 из c # - PullRequest
0 голосов
/ 12 января 2012

Я использую код ниже, чтобы найти, существует ли база данных, но ExecuteNonQuery всегда возвращает -1.

Я видел master.sys.databases представление и у него есть база данных POS

SqlConnection tmpConn = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True");

sqlCheckDBQuery = "SELECT * FROM master.sys.databases where name = \'aspnetdb\'";

using (tmpConn)
{
    try
    {
        tmpConn.Open();
        tmpConn.ChangeDatabase("master");
    }
    catch (Exception)
    {
        MessageBox.Show("SQLServer Express Database is either not installed or not running!", "Database Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
        Application.Exit();
    }

    using (SqlCommand sqlCmd = new SqlCommand(sqlCheckDBQuery, tmpConn))
    {
        int exists = sqlCmd.ExecuteNonQuery();

        if (exists <= 0)
            databaseExists = false;
        else
            databaseExists = true;
    }
}

Ответы [ 4 ]

4 голосов
/ 12 января 2012

в данном конкретном случае вы можете использовать скалярный запрос вместо чтения данных.

sqlCheckDBQuery = "SELECT count(1) FROM master.sys.databases where name = 'aspnetdb'";
var count = (int)sqlCmd.ExecuteScalar();
databaseExists = count > 1;
1 голос
/ 12 января 2012

Вы должны использовать ExecuteScalar() и изменить запрос для запуска COUNT(*).

ExecuteScalar вернет затронутые строки.

ExecuteNonQuery() вернет -1для SELECT х

0 голосов
/ 12 января 2012
sqlCheckDBQuery = "SELECT * FROM master.sys.databases where name = \'aspnetdb\'";

Почему вы используете обратную косую черту здесь?Имя базы данных: aspnetdb, поэтому это должно быть:

sqlCheckDBQuery = "SELECT * FROM master.sys.databases where name = 'aspnetdb'";

Также, как уже упоминалось в других ответах, вы не можете использовать ExecuteNonQuery() здесь, так как это будет возвращаться всегда -1 для выбранных операторов.

0 голосов
/ 12 января 2012

ExecuteNonQuery() - неправильный метод для использования.Вместо этого используйте ExecuteReader(): например:

var reader = command.ExecuteReader();
if (reader.Read())
    ....
...