Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C返回SQL版本#_C#_Sql - Fatal编程技术网

C# 使用C返回SQL版本#

C# 使用C返回SQL版本#,c#,sql,C#,Sql,我正在努力使用C#返回SQL版本,我是SQL编程新手,所以任何帮助都会很好。我得到了各种错误,但下面是我的最新尝试 private void buttonOK_Click(object sender, System.EventArgs e) { string strSqlVersion = SQLVersion(); MessageBox.Show(strSqlVersion); } private void sqlversion(string sqlver) { Od

我正在努力使用C#返回SQL版本,我是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();
    }
}

您的方法已声明为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();
    }
}
那么:

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;
}

您可以执行以下操作:

var dbProviderFactory = DbProviderFactories.GetFactory(ConnectionStringSettings.ProviderName);
conn = dbProviderFactory .CreateConnection();
conn.ConnectionString = ...
conn.Open();
string serverVersion = conn.ServerVersion;
这与数据库无关。

请尝试以下操作:

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
,并使用
组合框中的适当连接字符串对其进行了初始化

编辑:我还使用
块添加了
,以确保正确处理
OdbcCommand
OdbcConnection
对象。您对
sqlversion
的方法调用也包含一个参数,但没有指定任何参数,因此我删除了该参数


编辑2:将catch修改为仅处理(并忽略)一个
OdbcException

另一种方法,它要短得多,如下所示:

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

在我的(SQL Server 2005)上,这会打印“9.0”。

您能发布一些您收到的各种错误吗?而且,代码甚至没有意义。大概这应该是对
sqlversion(string)
的调用,而不仅仅是
string strSqlVersion=sqlversion()
。很抱歉,我对操作码的评论可能已经脱节并被删除。请参阅@Rubens Farias post about“Using”,这几乎不能解决代码中的所有问题。嗨,谢谢,使用MessageBox.Show(sqlversion().ToString())时;我得到错误“没有重载方法'sqlversion'接受0个参数”,哪里出错了?由于方法的声明方式,它需要一个字符串参数,MessageBox.Show(sqlversion(“”.ToString())也需要一个字符串参数;或者从声明中删除了字符串sqlver。因此,由于此时您应该从
sqlversion
方法返回字符串,因此不需要
.ToString()
它。这只是对一小段代码的优化重构(假设他的getConnection方法是可靠的,那么发布的代码中唯一可以工作的部分),并且没有解决代码中的任何实际问题。不,这是他试图做的事情的替代解决方案。你所做的一切都是在每个答案上发表这样的评论,但你自己的评论会让你看起来像个傻瓜。问题是,这是操作代码中唯一有效的部分的替代解决方案…参见操作注释on Chris Haas的回答。这家伙正在尝试获取SQL Server的版本。这是获取SQL Server版本的代码。我不确定我能为您简化多少,md5sum。这只是一小段代码的优化重构(假设他的getConnection方法是可靠的,那么发布的代码中唯一可以工作的部分),并且没有解决代码中的任何实际问题。