2017-03-02 18 views
1

すぐに学校プロジェクトがあります.ASP.NETのWebアプリケーションです。完成していたと思っていましたローカルMySQLデータベースを使用して意図したとおりに動作します。私の教授は、最近私たちのデータベースをMS Accessに変更するよう指示しました。問題のクラスは、私のDBテーブルから登録された人々を取り上げて、それをフィルタ付きの年齢に変換してグリッドビューに表示します。自分のコードとエラーのスクリーンショットを含めます。周りを見渡すと、アクセスDBで動作するようにSqlDataSourceを構成できることがわかりましたので、手順をたどりました。これが私が今取得しているエラーです。 '接続名' newregDBConnectionString.System.Data.OleDb 'がアプリケーション構成に見つかりませんでした。接続文字列が空です。'ASP.NET SQLからAccess DBに切り替えると、データソース/グリッドビューが機能しなくなる

どこに間違っているのか誰にでも教えてもらえますか?前もって感謝します!

My Web.config;

<add name="newregDBConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0; 
Data Source=C:\Users\Alex\Documents\Database1.accdb" 
providerName="System.Data.OleDb" /> 

アクセスDBを使用してSqlDataSourceを構成する手順は、次のとおりです。

<asp:SqlDataSource 
ID="source" 
runat ="server" 
ConnectionString ="<%$ ConnectionStrings:newregDBConnectionString %>" 
ProviderName ="<%$ ConnectionStrings:newregDBConnectionString.System.Data.OleDb %>" 
SelectCommand= "SELECT firstname, childID, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children ORDER BY age" /> 

私がグリッドビューを表示しようとしているC#コード。

namespace Coursework 
{ 
public partial class Testy1 : System.Web.UI.Page 
{ 
    //create a datasource 
    SqlDataSource source = new SqlDataSource();  

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //always set some defaults for the datasource 
     source.ID = "source1"; 
     source.ConnectionString = ConfigurationManager.ConnectionStrings["newregDBConnectionString"].ConnectionStr‌ing; 
     source.SelectCommand = "SELECT firstname, childID, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children ORDER BY age"; 

     if (!IsPostBack) 
     { 
      //bind the grid 
      GridView1.DataSource = source; 
      GridView1.DataBind(); 
     } 
    }  
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //the new database query, now with where clause 
     source.SelectCommand = "SELECT firstname, childID, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children WHERE (DATEDIFF(hour, dob, GETDATE())/8766 BETWEEN @start AND @end) ORDER BY age"; 

     //get the end age from the dropdown and cast as int 
     int end = Convert.ToInt32(DropDownList1.SelectedValue); 

     //get the start int for the filter 
     int start = end - 2; 

     //if the filter is resetted, make sure the query returns all ages 
     if (end == 5) 
     { 
      start = 5; 
      end = 99; 
     } 

     //replace the parameters in the query 
     source.SelectParameters.Add("start", start.ToString()); 
     source.SelectParameters.Add("end", end.ToString()); 

     //rebind the grid 
     GridView1.DataSource = source; 
     GridView1.DataBind(); 
    } 

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     string childID = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
     string deleteSql = "DELETE FROM Children WHERE childID = @childID; "; 
     using (var con = new OleDbConnection(ConfigurationManager.ConnectionStrings["newregDBConnectionString"].ConnectionStr‌​ing)) 
     using (var cmd = new OleDbCommand(deleteSql, con)) 
     { 
      cmd.Parameters.Add("@childID", OleDbType.VarChar).Value = childID; 
      con.Open(); 
      int deleted = cmd.ExecuteNonQuery(); 
     } 

     GridView1.DataSource = source; 
     GridView1.DataBind(); 
    } 

    protected void backBtn_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("Registration.aspx"); 
    } 
} 

}

+0

''を試したことがありますか? Access DBが 'AccessDataSource'を使用するSQL Serverで使用される' SqlDataSource'です。 –

+0

こんにちは@テツヤヤマモト、私はあなたが提案したものを試しましたが、今はエラーが発生します。 '例外の詳細:System.InvalidOperationException:AccessDataSource ConnectionStringプロパティを設定できません、自動的に生成されます。 私はこのガイド「https://msdn.microsoft.com/en-us/library/hktw939c(v=vs.85).aspx」に従っており、アクセスDBでSqlDataSourceを使用する方法を教えてくれました。私は他に何を試していいのかわかりません。 – ACostea

+0

'AccessDataSource'で' ConnectionString'属性を使用できないことを忘れてしまったので、 'DataFile'をDBファイルのパスで使うべきです。また、Access DBの 'SqlDataSource'の使用方法については、これをチェックしてください:https://msdn.microsoft.com/en-us/library/hktw939c(v=vs.85).aspx。 –

答えて

0

SqlDataSourceProviderName属性値が間違った形式で使用されている:MSDN documentationから

ProviderName="<%$ ConnectionStrings:newregDBConnectionString.System.Data.OleDb %>" 

、結合ConnectionStrings:newregDBConnectionString.providerNameデータソースのproviderNameプロパティはw​​eb.configファイルにproviderName属性値を参照接続文字列要素。

<asp:SqlDataSource ID="source" runat="server" 
ConnectionString="<%$ ConnectionStrings:newregDBConnectionString %>" 
ProviderName="<%$ ConnectionStrings:newregDBConnectionString.providerName %>" 
SelectCommand="SELECT firstname, childID, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children ORDER BY age" /> 

または直接使用プロバイダ名:

ProviderName="System.Data.OleDb" 

関連問題(providerNameプロパティは、同様の方法で使用されている方法を参照してください)。

ASP .NET - Configure SQLDataSource to use MySQL .NET Connector

であるとしてそのため、あなたは providerName財産を残す必要があります
+0

これまでのお役に立てていただきありがとうございます。あなたが提供したデータソースのコードスニペットを使用しましたが、今はエラーが発生します。 System.Data.dllで 'System.ArgumentException'型の例外が発生しましたが、ユーザーコードで処理されませんでした。 追加情報:キーワードはサポートされていません。 このエラーは、 "GridView1.DataBind();"コード – ACostea

関連する問題