Возвращение версии SQL с использованием C # - PullRequest
0 голосов
/ 14 января 2010

Я изо всех сил пытаюсь вернуть версию SQL, используя C #, я новичок в программировании на SQL, поэтому любая помощь будет полезна Я получаю различные ошибки, но ниже моя последняя попытка.

private void buttonOK_Click(object sender, System.EventArgs e)
{
    string strSqlVersion = SQLVersion();
    MessageBox.Show(strSqlVersion);
}

private void sqlversion(string sqlver)
{
    OdbcConnection conn = null;
    try
    {
        conn = getConnection(comboBoxDatabase.Text);
        string strSql = "SELECT @@VERSION";
        conn.Open();
        OdbcCommand cmd = new OdbcCommand(strSql, conn);
        string returnvalue = (string)cmd.ExecuteScalar();
        return returnvalue;
    }
    catch (Exception ex){ }
    finally
    {
        conn.Close();
    }
}

Ответы [ 5 ]

6 голосов
/ 14 января 2010

Вы можете сделать что-то вроде:

var dbProviderFactory = DbProviderFactories.GetFactory(ConnectionStringSettings.ProviderName);
conn = dbProviderFactory .CreateConnection();
conn.ConnectionString = ...
conn.Open();
string serverVersion = conn.ServerVersion;

Это не зависит от базы данных.

5 голосов
/ 14 января 2010

Ваш метод объявлен как void, замените его на String:

private string sqlversion(string sqlver)
{
    OdbcConnection conn = null;
    try
    {
        conn = getConnection(comboBoxDatabase.Text);
        string strSql = "SELECT @@VERSION";
        conn.Open();
        OdbcCommand cmd = new OdbcCommand(strSql, conn);
        string returnvalue = (string)cmd.ExecuteScalar();
        return returnvalue;
    }
    catch (Exception ex){ }
    finally
    {
        conn.Close();
    }
}
4 голосов
/ 14 января 2010

А как же:

private string SQLVersion()
{
    string version = "";
    try
    {
        using (OdbcConnection cn = new OdbcConnection("..."))
        using (OdbcCommand cm = cn.CreateCommand())
        {
            cn.Open();
            cm.CommandText = "SELECT @@Version";
            version = cm.ExecuteScalar() as string;
        }
    }
    catch (OdbcException) { }
    return version;
}
0 голосов
/ 14 января 2010

Другой способ сделать это, который намного короче, - это использовать SMO-библиотеку следующим образом:

var con = 
    new Microsoft.SqlServer.Management.Common.ServerConnection("MyServerName");
Debug.Print(con.ServerVersion.ToString());

На моем (SQL Server 2005) это печатает «9.0».

0 голосов
/ 14 января 2010

Попробуйте это:

private void buttonOK_Click(object sender, System.EventArgs e)
{
    string strSqlVersion = sqlversion();
    MessageBox.Show(strSqlVersion);
}

private string sqlversion()
{

    try
    {
        using (OdbcConnection conn = new OdbcConnection(comboBoxDatabase.Text))
        {
            string strSql = "SELECT @@VERSION";
            using (OdbcCommand cmd = new OdbcCommand(strSql, conn))
            {
                conn.Open();
                string returnvalue = Convert.ToString(cmd.ExecuteScalar());
                return returnvalue;
            }
        }
    }
    catch (OdbcException ex){ }
}

C # является регистрозависимым языком, поэтому я исправил регистр вызова вашего метода. Кроме того, вы не можете вернуть строку из метода void. Я также объявил ваш OdbcConnection как new и инициализировал его, как я полагаю, соответствующей строкой соединения из ComboBox.

РЕДАКТИРОВАТЬ: я также добавил using блоков, чтобы обеспечить правильное удаление ваших OdbcCommand и OdbcConnection объектов. Ваш вызов метода sqlversion также включал параметр, но ни один не был указан, поэтому я удалил параметр.

РЕДАКТИРОВАТЬ 2: Изменен улов только для обработки (и игнорирования) только OdbcException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...