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デコードしました:

Data Source = Server; Initial Catalog = Odata; Integrated Security = True; MultipleActiveResultSets = False; Packet Size = 4096; Application Name = "Microsoft SQL Server Management Studio" User ID = Name; Password = PW

ご覧のとおり、との;間が欠落しています。それが問題かどうかはわかりませんが、可能です。Application NameUser ID

于 2012-07-24T21:28:15.233 に答える
2

接続文字列はを使用しIntegrated Security=Trueますが、正しい構文は Integrated Security=SSPI;それTrusted_Connection=Trueを変更し、UserIdとPasswordを削除します。
(またはIntegrated Security = Trueを削除し、UserIDとPasswordを残します)

コード内の何かを変更してみてください。

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インジェクション攻撃や引用の問題が回避されます。
また、SELECTにはフィールドリストが必要です。*

于 2012-07-24T21:22:14.577 に答える
2

ジェイコブはそれが正しいと思います。ちなみに、これは行わないでください。

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

これは、先週yahooユーザーアカウントを取得するために使用されたものと同じように、SQLインジェクション攻撃につながります。

代わりにこれを行ってください:

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