C# 用数据填充Datagridview

C# 用数据填充Datagridview,c#,sql,sql-server,winforms,datagridview,C#,Sql,Sql Server,Winforms,Datagridview,我正在尝试根据查询填充我的datagridview。基本上,该查询应用于我在sql server中创建的一个视图,该视图是3表的联接。这是我的密码: Database a = new Database(); string ConStr = @"Data Source=HO-IT-WS-06;Initial Catalog=VMS;Integrated Security=True"; con = new SqlConnection(ConStr); con.Open(); String theDa

我正在尝试根据查询填充我的datagridview。基本上,该查询应用于我在sql server中创建的一个视图,该视图是3表的联接。这是我的密码:

Database a = new Database();
string ConStr = @"Data Source=HO-IT-WS-06;Initial Catalog=VMS;Integrated Security=True";
con = new SqlConnection(ConStr);
con.Open();
String theDate = dateTimePicker1.Value.ToString("yyyy-MM-dd");
String query = "SELECT cnic, name, comp_name, date_in, date_out, time_in," + 
        "time_out, chk_in, chk_out from visitor_status where date_in= @theDate";
SqlCommand sqlCmdStatement = new SqlCommand(query, con);
sqlCmdStatement.Parameters.AddWithValue("@theDate", theDate);
//dataGridView1.DataSource = ds.Tables[0];

SqlDataAdapter dataAdapter = new SqlDataAdapter(query,con); //c.con is the connection string
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGridView1.ReadOnly = true; 
dataGridView1.DataSource = ds.Tables[0];
例外情况:

    ************** Exception Text **************
System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable "@theDate".
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
   at Visitor_Management_System.People_Checked_In_On_Specific_Date.button1_Click(Object sender, EventArgs e) in d:\Jaali Copy\Visitor Management System\Visitor Management System\People Checked In On Specific Date.cs:line 61
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
ClientConnectionId:1afac376-fc05-4a77-ab81-8278cb908602

但是,它在dataAdapter.Fill(ds)行上给出了异常表示必须声明标量值@date。这里怎么了?为什么我的datagridview没有被填充?查询是否可以应用于c#?

中的视图您正在尝试在@theDate参数中插入字符串值

试试这个

DateTime theDate = dateTimePicker1.Value;
String query = "SELECT cnic, name, comp_name, date_in, date_out, time_in, time_out," +
     "chk_in, chk_out from visitor_status where date_in= @theDate";
SqlCommand sqlCmdStatement = new SqlCommand(query, con);
sqlCmdStatement.Parameters.AddWithValue("@theDate", theDate);
将SqlDataAdapter声明更改为

SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlCmdStatement);

如果in_date字段或dateTimePicker1包含时间,则必须像这样删除它

//Remove time from DateTimePicker
DateTime theDate = dateTimePicker1.Value.Date;

//Remove time from field
Where Convert(smalldatetime,Convert(char(10),date_in,103),103) = @theDate

中日期的数据类型是什么。是string还是datetime?date_in的数据类型是my table中的date。您提到您正在使用3个表的联接查询,但在您的代码示例中,我看不到任何联接??为什么在这个问题@Karthikamrca中需要datagridview标记?您能描述datagridview与问题的关系吗@同时出现KarthikAMRsame异常line@user3441306请向我显示完整的错误消息。问题在这里
SqlDataAdapter dataAdapter=newsqldataadapter(query,con)您正在SqlCommandObject中创建一个参数,并且正在使用SQL查询创建SqlDataAdapter对象。将该行替换为
SqlDataAdapter dataAdapter=new SqlDataAdapter(sqlCmdStatement)现在没有异常,但datagrid中没有显示任何内容!