すぐに学校プロジェクトがあります.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"].ConnectionString;
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"].ConnectionString))
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");
}
}
}
' 'を試したことがありますか? Access DBが 'AccessDataSource'を使用するSQL Serverで使用される' SqlDataSource'です。 –
こんにちは@テツヤヤマモト、私はあなたが提案したものを試しましたが、今はエラーが発生します。 '例外の詳細:System.InvalidOperationException:AccessDataSource ConnectionStringプロパティを設定できません、自動的に生成されます。 私はこのガイド「https://msdn.microsoft.com/en-us/library/hktw939c(v=vs.85).aspx」に従っており、アクセスDBでSqlDataSourceを使用する方法を教えてくれました。私は他に何を試していいのかわかりません。 – ACostea
'AccessDataSource'で' ConnectionString'属性を使用できないことを忘れてしまったので、 'DataFile'をDBファイルのパスで使うべきです。また、Access DBの 'SqlDataSource'の使用方法については、これをチェックしてください:https://msdn.microsoft.com/en-us/library/hktw939c(v=vs.85).aspx。 –