远程SQL登录页​​面C#

时间:2010-06-10 17:04:34

标签: c# sql login

嘿,我正在尝试创建一个登录页面,用于检查服务器上数据库的用户名和密码。该服务器位于其他国家/地区。

这是我到目前为止的代码:

    #region Building the connection string

            string Server = "XX.XXX.XX.XX, XXXX";
            string Username = "_Username_";
            string Password = "_Password_";
            string Database = "_Database_";

            string ConnectionString = "Data Source=" + Server + ";";
            ConnectionString += "User ID=" + Username + ";";
            ConnectionString += "Password=" + Password + ";";
            ConnectionString += "Initial Catalog=" + Database;

            #endregion

            SqlConnection SQLConnection = new SqlConnection();

            try
            {
            SQLConnection.ConnectionString = ConnectionString;
            SQLConnection.Open();
 
            // You can get the server version 
            // SQLConnection.ServerVersion
            }

            catch (Exception Ex)
            {
            // Try to close the connection
            if (SQLConnection != null)
                SQLConnection.Dispose();
 
            // Create a (useful) error message
            string ErrorMessage = "A error occurred while trying to connect to the server.";
            ErrorMessage += Environment.NewLine;
            ErrorMessage += Environment.NewLine;
            ErrorMessage += Ex.Message;
 
            // Show error message (this = the parent Form object)
            MessageBox.Show(this, ErrorMessage, "Connection error", MessageBoxButtons.OK, MessageBoxIcon.Error);
 
            // Stop here
            return;
}

我收到错误消息:

  

需要非负数。   参数名称:count

我已经在我的服务器上接受了通配符,我不知道该错误意味着什么? 任何帮助将不胜感激,

感谢。

5 个答案:

答案 0 :(得分:1)

您需要在连接字符串中的服务器名称周围加上引号。

但是,您应该使用SqlConnectionStringBuilder,例如:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();

builder.DataSource = Server;
builder.UserID = Username;
builder.Password = Password;
builder.InitialCatalog = Database;


SqlConnection SQLConnection = new SqlConnection(builder.ToString());
try {
    SQLConnection.Open();
    ...
} finally {
    SQLConnection.Close();        
}

此外,您应该在finally块中关闭连接。

答案 1 :(得分:0)

首先尝试使用真正的连接字符串 - 使用SSMS对数据库进行测试,然后创建自己的连接字符串。一旦第一个工作,第二个应该工作(确保它们是相同的)

从来没有将客户端的输入连接到SQL语句中(我知道这是一个连接字符串...但是使用输入而不检查非法字符/注入是一个坏主意,所以在代码中更进一步 - 确保你没有不这样做。

答案 2 :(得分:0)

为什么数据访问代码中有messagebox.show?

非常糟糕的做法。

可以在这里找到有效的连接字符串

http://www.connectionstrings.com/

也使用连接字符串构建器 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx

我猜测你的连接字符串是无效的,所以它在计算它的参数时失败了...但我真的猜测那里。

你的连接字符串不会改变,所以id将它放在app.config ro web.config

如果添加数据源,它将构造连接字符串并将该项添加到web.config中。

答案 3 :(得分:0)

SLaks

建议的最佳选项用户SqlConnectionStringBuilder

将连接字符串放在app.config文件中

尝试用分号(;)终止连接字符串 - 这只是一个疯狂的猜测

  string ConnectionString = "Data Source=" + Server + ";";
  ConnectionString += "User ID=" + Username + ";";
  ConnectionString += "Password=" + Password + ";";
  ConnectionString += "Initial Catalog=" + Database + ";";

PS: - 请注意John Nicholas在数据访问代码中对MessageBox所说的内容。如果您是初学者,那么请尽早开发出良好的编码实践。当您毕业时编写更复杂的应用程序时,它将极大地帮助您。

答案 4 :(得分:0)

我遇到同样的问题,我在网上找不到任何建议似乎都有用。

在我的笔记本电脑(Win7)上我可以安装MySQL连接器,只需在Visual Studio中添加一个引用并添加“using MySql.Data.Client;”或者代码之上的东西。现在我尝试在我的桌面(WinXP)上执行相同的操作,并且参考列表中没有任何内容。谷歌搜索了一段时间后,我找到了一个新的bèta版本的MySQL连接器的模糊链接,它似乎安装在C#中。您不必再添加引用,只需使用“using System.Data.SqlClient;”。

当我使用它并正确设置一切时,它仍然给我这个错误。查看Wireshark,除了倒数第二个字符串中的一个字符串外,所有数据包都是不可读的:“数据包乱序”。 我怀疑MySQL客户端与我的MySQL服务器版本不兼容。毕竟客户端的安装版本是bèta,我的MySQL服务器不是最新版本。我不打算尝试这个理论,经过几个小时的努力,我很喜欢 - 我会用我的笔记本电脑。

很抱歉,这个回复无法解决,但我发帖是希望我可以指出某人正确的方向。