foreach问题求救(System.NullReferenceException: 未将对象引用设置到对象的实例)
源代码如下:问题出在 foreach (DataRow row in dsRead.Tables[0].Rows)这句话上,出现的问题如下所示:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 57: //DataRow row = null;
行 58:
行 59: foreach (DataRow row in dsRead.Tables[0].Rows)
行 60: {
行 61:
源文件: e:\softbak\experimentmanage修改后\experimentmanage\open_experiment\teacher\get_data_from_excel.aspx.cs 行: 59
堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
open_experiment_teacher_get_data_from_excel.SubmitBtn_Click(Object sender, ImageClickEventArgs e) in e:\softbak\experimentmanage修改后\experimentmanage\open_experiment\teacher\get_data_from_excel.aspx.cs:59
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +75
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4919
----------下面是源代码----------
public partial class open_experiment_teacher_get_data_from_excel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Session["xueyuan_id"] = "03";
this.Session["lab_id"] = "0302";
}
}
private static int getMaxID(String xueyuan_id, String lab_id)
{
SqlDataReader sdr = BigdaddySP.SelectSomethingNoPageWithWhere_SqlDataReader("V_getMaxProjectID", "xueyuan_id='" + xueyuan_id + "' and lab_id='" + lab_id + "'");
if (sdr.Read())
{
return Convert.ToInt32(sdr["max_id"].ToString());
}
sdr.Close();
return 0;
}
private static String computeProjectID(int id)
{
String str = Convert.ToString(id);
if (str.Length == 1)
return "000" + str;
else if (str.Length == 2)
return "00" + str;
else if (str.Length == 3)
return "0" + str;
else if (str.Length == 4)
return str;
else return "0000";
}
protected void SubmitBtn_Click(object sender, ImageClickEventArgs e)
{
//tecselclassid,name,url,_time
ViewState["excel_name"] = excel_name.Text;
DataSet dsRead= CreateDataSource(ViewState["excel_name"].ToString());
//DataRow row = null;
------------------------------------
foreach (DataRow row in dsRead.Tables[0].Rows)//???????????
--------------------------------
{
int pro_id=getMaxID(this.Session["xueyuan_id"].ToString(),this.Session["lab_id"].ToString())+1;
int iRet = 0;
SqlParameter[] prams = {
DataBase.MakeInParam("@id", SqlDbType.Int, 4,row["id"].ToString()),
DataBase.MakeInParam("@name", SqlDbType.VarChar, 50,row["姓名"].ToString()),
DataBase.MakeInParam("@type", SqlDbType.VarChar, 50,row["type"].ToString()),
DataBase.MakeInParam("@request", SqlDbType.VarChar, 50,row["请求"].ToString()),
DataBase.MakeInParam("@xueyuan_id", SqlDbType.VarChar, 2,this.Session["xueyuan_id"].ToString()),
DataBase.MakeInParam("@lab_id", SqlDbType.VarChar, 4,this.Session["lab_id"].ToString()),
DataBase.MakeInParam("@project_id", SqlDbType.VarChar, 4,computeProjectID(pro_id))
};
iRet = DataBase.RunProcInsert("insert_project", prams);
if (iRet > 0)
{
message.Text = "<script>this.alert('信息提交成功.')</script>";
}
else
{
message.Text = "<script>this.alert('信息提交失败.')</script>";
}
}
DataSet ds = BigdaddySP.SelectSomethingNoPageWithWhere_DataSet("open_project", "1=1");
list.DataSource = ds.Tables[0].DefaultView;
list.DataBind();
//Databind();
}
public static DataSet CreateDataSource(string Src)
{
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + Src + ";" +
"Extended Properties=\"Excel 8.0;IMEX=1;\"";//连接
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = schemaTable.Rows[0][2].ToString().Trim();//得到excel表名
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", strConn);//查找excel数据
DataSet myDataSet = new DataSet();//定义数据
myCommand.Fill(myDataSet);
conn.Close();
return myDataSet;
}
catch
{
return null;
}
}
}