3

当我尝试在 C# 中编写与我的应用程序到我的数据库的连接时,我在 Visual Studio 2005 中成功构建了应用程序,但是当我在调试器中运行该站点时出现错误:

Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 118.

这是给出错误的连接代码:

SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Server"].ConnectionString);

我在我的 web.config 文件中正确写入了连接字符串,所以我对这远程意味着什么一无所知。我不确定我是否遗漏了什么。任何帮助表示赞赏。这是我可能有帮助的部分的完整代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;
using System.Data.SqlClient;

public partial class RateAnalyzerPage: System.Web.UI.Page
{
    protected void Search_Click(object sender, EventArgs e)
    {
        string IDnumber = mechantNumber.Text;
        string selectSQL = "SELECT FROM Authors Where MID='"+ IDnumber +"'";
   // SqlConnection con = new SqlConnection(@"Server="); 
    //SqlConnection con = new SqlConnection();
    SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Server"].ConnectionString);
    SqlDataReader reader;
    try
    {
        con.Open();
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            QualVol.Text = reader["TotalVolume"].ToString();
        }
        reader.Close();
    }
    catch (Exception err)
    {

    }
    finally
    {
        con.Close();
    }
}
}

如果我错过了一些有用的数据,请告诉我。

这是连接字符串:

4

3 回答 3

7

我已经分离出来,XML 解码了连接字符串值:

数据源=服务器;初始目录=Odata;集成安全=True;MultipleActiveResultSets=False;数据包大小=4096;应用程序名称=“Microsoft SQL Server Management Studio”用户ID=名称;密码=PW

如您所见,您缺少一个;betweenApplication NameUser ID。我不确定这是否是问题,但这是可能的。

于 2012-07-24T21:28:15.233 回答
2

我认为雅各布是对的。在旁注中,不要这样做:

string selectSQL = "SELECT FROM Authors Where MID='"+ IDnumber +"'";

这将导致 sql 注入攻击,就像上周用来获取 yahoo 用户帐户的攻击一样。

改为这样做:

 string selectSQL = "SELECT * FROM Authors Where MID=@ID"; 
 cmd.Parameters.AddWithValue("@ID", IDnumber );
于 2012-07-24T21:32:25.867 回答
2

您的连接字符串使用Integrated Security=True,但正确的语法是 Integrated Security=SSPI;左右Trusted_Connection=True更改它并删除 UserId 和 Password。
(或删除 Integrated Security=True 并保留用户 ID 和密码)

尝试更改代码中的某些内容。

protected void Search_Click(object sender, EventArgs e) 
{ 
    string IDnumber = mechantNumber.Text; 
    string selectSQL = "SELECT * FROM Authors Where MID=@num"; 
    using(SqlConnection con = new SqlConnection
                      (System.Configuration.ConfigurationManager.ConnectionStrings
                       ["Server"].ConnectionString))
    {
         SqlDataReader reader; 
         con.Open(); 
         SqlCommand cmd = new SqlCommand(selectSQL, con); 
         cmd.Parameters.AddWithValue("@num", IDNumber);
         reader = cmd.ExecuteReader(); 
         while (reader.Read()) 
         { 
              QualVol.Text = reader["TotalVolume"].ToString(); 
         } 
         reader.Close(); 
    } 
} 

尝试使用usingstatemend,这可以保证您的连接的处理
尝试使用参数化查询,这可以避免Sql Injection攻击和引用问题
另外SELECT需要一个字段列表或*

于 2012-07-24T21:22:14.577 回答