我使用C#中的N層tec工作,試圖使其易於使用並能夠更改任何數據庫類型,無需重新編寫所有的cod, 我的代碼這裏沒有得到任何錯誤,但它沒有得到任何值到我的文本框
(我想從表中獲取數據到許多文本框以後更新) 和這裏代碼如何工作:{ 使一些函數採取任何設置任何類型的參數或設置任何命令,然後我做其他功能來執行我設置或從數據庫中獲得的所有功能我建立它在文件夾名稱(數據訪問層) 然後我做其他文件夾(數據構建層)使用所有這些功能ri想要在任何頁面上執行(插入,更新,刪除,選擇), 最後認爲我這樣做是爲了將我在(數據構建圖層)製作的函數調用到我的頁面或控件, 我這麼做是因爲if我更改數據庫類型,我只能改變一個類和其他類仍然是相同的 我希望我解釋就夠了(對不起我的英語不夠好)}它沒有從DataReader中獲取任何數據
代碼:
類DataAccessLayer
public static void Setcommand (SqlCommand cmd,CommandType type,string commandtext)
{
cmd.CommandType=type;
cmd.CommandText=commandtext;
}
public static void AddSQLparameter(SqlCommand cmd, int size,SqlDbType type,object value,string paramName,ParameterDirection direction)
{
if (cmd == null)
{
throw (new ArgumentException("cmd"));
}
if (paramName == null)
{
throw (new ArgumentException("paramName"));
}
SqlParameter param=new SqlParameter();
param.ParameterName= paramName;
param.SqlDbType=type;
param.Size=size;
param.Value=value;
param.Direction=direction;
cmd.Parameters.Add(param);
}
public static SqlDataReader ExecuteSelectCommand(SqlCommand cmd)
{
if (cmd == null)
{
throw (new ArgumentNullException("cmd"));
}
SqlConnection con = new SqlConnection();
cmd.Connection = con;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
con.Close();
return dr ;
}
類DatabuildLayer
SqlCommand com;
public DatabuildLayer()
{
com = new SqlCommand();
//
// TODO: Add constructor logic here
//
}
public SqlDataReader SelectCatalog(int catid)
{
DataAccessLayer.Setcommand(com, CommandType.Text, "select catname,catdescription,photo from category where [email protected]");
DataAccessLayer.addSQLparameter(com,16,SqlDbType.Int,catid,"@catid",ParameterDirection.Input);
return DataAccessLayer.ExecuteSelectCommand(com);;
}
,並在這裏我是恢復我的數據,一些文本框
在我的頁面加載上次代碼:
protected void Page_Load(object sender, EventArgs e)
{
DatabuildLayer= new DatabuildLayer();
SqlDataReader dr ;
dr = obj.SelectCatalog(catselectddl.SelectedIndex);
if (dr.Read())
{
catnametxt.Text = dr["catname"].ToString();
catdestxt.Text = dr["catdescription"].ToString();
}
}
您的代碼非常糟糕。我建議你利用數據訪問應用程序塊開始:http://msdn.microsoft.com/en-us/library/ff664408%28v=PandP.50%29.aspx –
無論我讀作DBHelper'或類似: http://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren/9707060#9707060順便說一句,你應該總是緊密連接(使用'使用-statement') –
我認爲你真的很複雜,我可以幫你從數據讀取器獲取數據,但我必須問。您提到您希望能夠在不編寫任何代碼的情況下交換數據庫類型 - 但「com」的價值和設置在哪裏?我問這是因爲select語句本身只能在特定的數據庫引擎中兼容,而且只有當語句非常簡單時纔是如此。如果我們可以根據我的假設簡化這一點,我們將使您的生活變得更加輕鬆。 –