在C#中的Windows窗体应用程序中从存储过程在DataGridView中显示数据

时间:2015-08-22 05:59:32

标签: c# sql-server-2008 datagridview

我使用以下代码,但它在SqlDataReader

上引发错误
SqlConnection cn = new SqlConnection(@"Data Source=.;Initial Catalog=Employee1;Persist Security Info=True;User ID=sa;Password='786'");

SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.Date";
cmd.Parameters.AddWithValue("@DOB", Convert.ToDateTime(textBox1.Text));

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Employee ID", typeof(string)), new DataColumn("Employee Name", typeof(string)), new DataColumn("Status",typeof(char)) });
dt.Rows.Add();

try
{
    cn.Open();
    SqlDataReader res;
    res = cmd.ExecuteReader();
    MessageBox.Show("COmmand Executed Successfully");

    int i = 0;

    if (res.Read())
    {
        dt.Rows.Add(res[i].ToString(), res[++i].ToString(), res[++i].ToString());
    }

    res.Close();
    cn.Close();

    dataGridView1.DataSource = dt;
}
catch (Exception exp)
{
    MessageBox.Show(exp.StackTrace);
}

例外是:

  System.Data.Sq1Client.SqlInternalConnection.OnError(SqlException异常,Boolean breakConnection,Action' 1 wrapCloselnAction)中的System.Data.Sqlaient.Sq1Connection.OnError(SqlException异常,Boolean breakConnection,Action' wrapCloselnAction)

)在System.Data.Sq1Client.TdsParser.ThrowExceptionAndWarning(TdsParserStateObje克拉stateObj,布尔callerHasConnectionLock,布尔asyncClose)在System.Data.SqIClient.TdsParser.TryRun(runBehavior runBehavior,SqICommand cmdHandler,SqIDataReader数据流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔&安培; System.ReData)System.Data上的System.Data.Sq1Client.Sq1.Si1.ReincuteReader(Sq1DataReader ds,RunBehavior runBehavior,String resetOptionsString)上的System.Data.Sq1Client.Sq1DataReader.TryConsumeMetaData()处于System.Data.Sq1Client.Sq1DataReader.get_MetaData()处。 .Sq1Client.Sq1Command.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boole异步,Int32超时,任务& System.Data.Sq1Client.Sq1Command.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,TaskCompletionSourcel完成,Int32超时,任务和任务,布局asyncWrite)中的task,Boolean asyncWrite,SqIDataReader ds,Boolean d escri beParameterEncryptionRequest)在System.Data.Sq1Client.Sq1Command.ExecuteReader0 at的System.Data.Sq1Client.Sq1Command.ExecuteReader(CommandBehavior behavior,String方法)中的System.Data.Sq1Client.Sq1Command.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法) attendance.Form4.buttonS_Click(对象发件人,EventArgs e)在c:\ Users \ admin \ Desktop \ Attendance \ Attendance \ Form4.cs:第72行

1 个答案:

答案 0 :(得分:0)

首先从密码中删除单引号。其次,在添加行时,使用res [i]时i是列的索引,因此无需递增此值。您还可以使用块来关闭连接并在此循环中处置对象。您也不需要dt.Rows.Add(),因为它用于添加行而不是列。以下是您的方法的重构:

[^A-Za-z\d\s]+