-2

以下のコードは、実行時に App.config の接続文字列を変更するのに役立ちます。ここで見つけましたが、このコードは Visual Studio 2010 と SQL Server 2008 では機能せず、Northwind データベースへの接続を開くことができませんでした。

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace MyNameSpace
{
    public partial class FrmConnectionTest : Form
    {
        public FrmConnectionTest()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //Constructing connection string from the inputs
                StringBuilder Con = new StringBuilder("Data Source=");
                Con.Append(TxtServer.Text);
                Con.Append(";Initial Catalog=");
                Con.Append(TxtDatabase.Text);
                Con.Append(";Integrated Security=SSPI;");
                string strCon = Con.ToString();
                updateConfigFile(strCon);
                //Create new sql connection
                SqlConnection Db = new SqlConnection();
                //to refresh connection string each time else it will use             previous connection string
                ConfigurationManager.RefreshSection("connectionStrings");
                Db.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ToString();
                //To check new connection string is working or not
                SqlDataAdapter da = new SqlDataAdapter("select * from employee");
                DataTable dt = new DataTable();
                da.Fill(dt);
                CmbTestValue.DataSource = dt;
                CmbTestValue.DisplayMember = "EmployeeID";
            }
            catch (Exception E)
            {
                MessageBox.Show(ConfigurationManager.ConnectionStrings["con"].ToString() + ".This is invalid connection", "Incorrect server/Database");
            }
        }
        public void updateConfigFile(string con)
        {
            //updating config file
            XmlDocument XmlDoc = new XmlDocument();
            //Loading the Config file
            XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
            foreach (XmlElement xElement in XmlDoc.DocumentElement)
            {
                if (xElement.Name == "connectionStrings")
                {
                    //setting the coonection string
                    xElement.FirstChild.Attributes[2].Value = con;
                }
            }
            //writing the connection string in config file
            XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        }
    }
}

Visual Studio 2010 と SQL Server2008 を使用すると、次の行で 2 つのエラーが発生しました。

            SqlDataAdapter da = new SqlDataAdapter("select * from employee");
  • エラー 1 'System.Data.SqlClient.SqlDataAdapter.SqlDataAdapter(System.Data.SqlClient.SqlCommand)' に最適なオーバーロードされたメソッドの一致に無効な引数がいくつかあります

  • エラー 2 引数 1: 'string' から 'System.Data.SqlClient.SqlCommand' に変換できません

この問題の解決策はありますか? ありがとうございました。

4

2 に答える 2

1

エラーは、間違ったパラメーターをSqlDataAdapterに渡していることを示しています。適切な呼び出しは次のようになると思います。

SqlDataAdapter da = new SqlDataAdapter("select * from employee", Db); 

編集

プログラム内から接続文字列を作成し、構成ファイルに保存してから、SqlDataAdapter を作成する直前に構成ファイルから読み取っているようです。したがって、この行をデバッグすると:

Db.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ToString();  

Db.ConnectionString実際に接続文字列が含まれていることを再確認してください。

もう 1 つは、SQL Server Management Studio を開いて、そこから Northwind データベースに接続できることを確認することです。または、Visual Studio で「サーバー エクスプローラー」ウィンドウを開き、[接続の追加] をクリックして、接続プロパティ ウィンドウをサーバーに設定し、コンボボックスをドロップダウンして、Northwind へのデータ接続を作成できることを確認します。データベース:

ここに画像の説明を入力

于 2012-04-18T23:20:33.130 に答える
0

classの利用可能なコンストラクターをSqlDataAdapter見てください。

SQL 文字列だけを受け入れるコンストラクターのオーバーロードはありません。
他のオーバーロードのいずれかを使用する必要があります。
たとえば、SQL String と SqlConnection オブジェクトが必要なものがあります。これを使用するには、コードを次のように変更します。

SqlDataAdapter da = new SqlDataAdapter("select * from employee", Db);

編集:

BradRem がコメントで既に述べたように、別の接続文字列を試してください。彼の例がうまくいかない場合は、 http://connectionstrings.com/sql-server-2008
でより多くの例を見つけることができます。

サーバー上で呼び出されたデータベースが本当にありNorthwindますか?
現在のマシンの Windows ユーザーは、サーバー上でデータベースにアクセスする権限を持っていますか? (つまりIntegrated Security=SSPI、現在の Windows ユーザーがデータベースへのアクセスに使用されます!)

于 2012-04-18T23:20:43.520 に答える