【问题标题】:where does the `scalr` variable“标量”变量在哪里
【发布时间】: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();

标签: c# sql asp.net datetime


【解决方案1】:

我已经解决了这个问题,这一切似乎都围绕着日期格式,当我将日期格式从“dd/MM/yyyy”更改为“yyyyMMdd”时,它工作得很好。

【讨论】:

  • 不,你应该使用surgdate作为参数的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多