Flere problemer med indkapsling
HejJeg forsøger at indcapsle OleDbDataAdapter således at jeg i mine scripts ikke skal refferere direkte til dette navn men
i stedet kan refferere til mit eget navn DbDataAdapter. På den måde kan jeg altid nemt skifte til feks ODBC hvis jeg skulle få lyst.
Men når jeg eksekvere koden siger compileren :
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Nedensåtende linie highlightes af compileren :
Db.DbDataAdapter.Fill(DbDataSet, "MyTabel");
Min kode ser sådan ud :
using System.Data;
using System.Data.OleDb;
//using Databaseenv;
namespace Databaselag {
public class classDbConnstr {
public string dbConnStr {
get {
return "Myconnectionstring";
}
}
}
public class Database {
public OleDbConnection DbConnection;
public OleDbDataAdapter DbDataAdapter;
public OleDbCommand DbCommand;
classDbConnstr DbConnStr = new classDbConnstr(); // connection string //
public void MdbConnect () {
DbConnection = new OleDbConnection(DbConnStr.dbConnStr);
}
public void MdbPassSqlstring(string SqlString) {
OleDbDataAdapter DbDataAdapter = new OleDbDataAdapter(SqlString,DbConnection);
}
}
}
<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
Database Db = new Database(); // instans af databaselag
DataSet DbDataSet = new DataSet(); // Dataadapter
void Page_Load(object sender, EventArgs e) {
Db.MdbConnect();
}
void UpdateDb(object sender, EventArgs e) {
String InsertCmd = "insert into MyTable (Name, Address, Registred) values (@Name, @Address, @Registred)";
Db.DbCommand = new OleDbCommand(InsertCmd, Db.DbConnection);
Db.DbCommand.Parameters.Add(new OleDbParameter("@Name", OleDbType.VarChar, 30));
Db.DbCommand.Parameters["@Name"].Value = HttpUtility.HtmlEncode(Name.Text);
Db.DbCommand.Parameters.Add(new OleDbParameter("@Address", OleDbType.VarChar, 30));
Db.DbCommand.Parameters["@Address"].Value = HttpUtility.HtmlEncode(Address.Text);
Db.DbCommand.Parameters.Add(new OleDbParameter("@Registred", OleDbType.VarChar, 20));
Db.DbCommand.Parameters["@Registred"].Value = DateTime.Now;
Db.DbCommand.Connection.Open();
Db.DbCommand.ExecuteNonQuery();
Db.DbCommand.Connection.Close();
Label1.Text = HttpUtility.HtmlEncode(Name.Text);
}
void TestDb(object sender, EventArgs e) {
// OleDbDataAdapter DbDataAdapter = new OleDbDataAdapter("select * from MyTable", Db.DbConnection);
// DbDataAdapter.Fill(DbDataSet, "MyTable");
Db.MdbPassSqlstring("select * from MyTable");
Db.DbDataAdapter.Fill(DbDataSet, "MyTable");
MyDatagrid.DataSource=DbDataSet.Tables["MyTable"].DefaultView;
MyDatagrid.DataBind();
}
</script>
Det eneste jeg kan få til at virke er hvis jeg indsætter følgende kode :
OleDbDataAdapter DbDataAdapter = new OleDbDataAdapter("select * from MyTable", Db.DbConnection);
DbDataAdapter.Fill(DbDataSet, "MyTable");
i stedet for følgende :
Db.MdbPassSqlstring("select * from MyTable");
Db.DbDataAdapter.Fill(DbDataSet, "MyTable");
Men så står der jo igen oleDbDataAdapter i mit script, og så er der jo ikke indkapslet noget. :-(
Hvad gør jeg galt ? Er der nogen der kan hjælpe?
