C# 使用C返回SQL版本#
我正在努力使用C#返回SQL版本,我是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
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方法是可靠的,那么发布的代码中唯一可以工作的部分),并且没有解决代码中的任何实际问题。