【发布时间】:2020-12-06 02:11:18
【问题描述】:
好吧,过去三天我一直试图解决这个问题,但无济于事,看了几十个问题和答案。 这是有问题的代码。我已经用>>标记了它的倒下位置,这大约是从底部向上的第 4 行。 错误消息是:必须声明一个标量变量,所需的结果是获取特定外科医生正在执行的手术日期的记录数。
protected void ItemUpdated_refreshSQLDS1(object sender, FormViewUpdatedEventArgs e)
{
strCmd = "SELECT ScheduledSurgeryID, PatientSurgeryID, " +
"Hospital, SurgeryDate, Surgeon, Anaesthetist, Patient, " +
"Gender, DateofBirth, NHINumber, Address, HomePh, Mobile, " +
"WorkPh, Email, DayStay, NightsHosp, OperationOrder, " +
"AdmitTime, SurgeryTime, ARTPDescription, " +
"PrimaryProcedure, ACCCode, MBSECode, Side, ClaimNumber, " +
"PolicyNumber, Insurer, OpTime, SurgeonID, MedicalAlert, " +
"AnaestheticType, ACCPurchaseOrder, PriorApproval, " +
"EquipmentRequired, HospitalID, SurgeonFee, PatientFileNo FROM vSurgeryList " +
"WHERE PatientSurgeryID = '" + Session["sid"] + "'";
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataSet;
SqlDataSource1.ConnectionString = strConnStr;
SqlDataSource1.SelectCommand = strCmd;
FormView1.DataSource = SqlDataSource1;
FormView1.DataBind();
CultureInfo ci = new CultureInfo("en-NZ");
DataSourceSelectArguments args = new DataSourceSelectArguments();
DataView view = (DataView)SqlDataSource1.Select(args);
DataTable dt = view.ToTable();
var st = dt.Rows[0]
["SurgeryDate"].ToString().PadRight(10).Substring(0, 10);
DateTime surgdate = Convert.ToDateTime(st,ci);
string thedate = surgdate.ToShortDateString();
this.Session["surgeryDate"] = dt.Rows[0]["SurgeryDate"];
MessageBox.Show(thedate);
strCmd = "SELECT vSurgeryList.ScheduledSurgeryID " +
",vSurgeryList.SurgeryDate "+
",tblSurgeons.SurgeonID "+
"FROM dbo.vSurgeryList " +
"INNER JOIN dbo.tblSurgeons ON vSurgeryList.Surgeon =
tblSurgeons.Surgeon "+
"WHERE tblSurgeons.SurgeonID = '" +
Session["CurrentSurgeonID"] + "' "
+ "AND vSurgeryList.SurgeryDate = @date";
List<SqlParameter> parameters = new List<SqlParameter>();
SqlCommand cmd = new SqlCommand(strCmd);
SqlParameter param1 = new SqlParameter();
param1.ParameterName = "@date";
param1.Value = thedate;
cmd.Parameters.Add(param1);
ds = data.ReturnDataSet(strCmd, param1.ParameterName, param1.Value);
BindingSource bSource = new BindingSource();
bSource.DataSource = ds.Tables[0];
int rc = ds.Tables[0].Rows.Count;
SqlDataSource2.DataSourceMode = SqlDataSourceMode.DataSet;
SqlDataSource2.ConnectionString = strConnStr;
SqlDataSource2.SelectCommand = strCmd;
cmd.Parameters.AddWithValue("@date", SqlDbType.DateTime).Value =
thedate;
args = new DataSourceSelectArguments();
>> view = (DataView)SqlDataSource2.Select(args);
dt = view.ToTable();
rc = dt.Rows.Count;
}
【问题讨论】:
-
string thedate = surgdate.ToShortDateString();不要那样做 - 你应该传入DateTime而不是string。 -
SqlDataSource2.SelectCommand = strCmd;应该是SqlDataSource2.SelectCommand = cmd;吗? -
strCmd 是从字符串中选择的字符串,它与 cmd 内容一起传递给数据访问层。字符串 thedate 是由保存在数据库中日期字段中的 gridview 字段制成的,但是当检索到它时,它会显示分钟,但该字段不是日期时间字段。我知道参数可以解决日期格式问题。这就是我们这些老新手的麻烦。
-
"WHERE PatientSurgeryID = '" + Session["sid"] + "' 即使Session["sid"]不是来自用户,这也会带来麻烦。使用参数。总是。 -
将 Session 对象转换为字符串。例如会话["sid"].ToString();