0

いくつかの異なるクラスから収集された更新ステートメントを書くのに問題があります。それでは、私が持っているものを説明しましょう..

データベースの属性を取得および設定する Minutes.cs クラスがあります。

public class Minute{
public Minute()
{
    //
    // TODO: Add constructor logic here
    //
}

public int ID
{
    get;
    set;
}
public string Location
{ 
    get; set; 
}
public string PeriodDate
{
    get;
    set;
}
public string PeriodTime
{
    get;
    set;
}
public string Facilitator
{
    get;
    set;
}
public string Attenders
{
    get;
    set;
}

public string Agenda
{ 
    get; set; 
} 

public string Title
{ 
    get; set; 
}

public DateTime DateTime
{
    get;
    set;
}}

これは、データベース層と対話する私の MinuteDB.cs クラスです。このクラスから aspx.cs ページにパラメーター (SAParameters) を渡したいので、パラメーター化された更新を実行できます (唯一の理由は、更新できないためです)。日時形式なので、パラメーター化されたクエリを使用する必要があります:S)、これを正しく行っているかどうかはわかりません。

public class MinuteDB{
//string strConnString = ConfigurationManager.ConnectionStrings["emaDB2"].ConnectionString;
public static String DB_STR = ConfigurationManager.ConnectionStrings["emaDB2"].ConnectionString;
//public static String DB_STR = "UserID=dba;Password=sql;DatabaseName=emaDB;ServerName=emaDB";

public MinuteDB()
{

}

public static void DoUpdateQuery(String sql)
{
    //Create a connection, replace the data source name with the name of the SQL Anywhere Demo Database that you installed
    SAConnection myConnection = new SAConnection(DB_STR);
    //open the connection 
    myConnection.Open();

    //Create a command object. 
    SACommand myCommand = myConnection.CreateCommand();

    //Specify a query. 
    myCommand.CommandText = sql;


    SAParameter parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.NVarChar;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.Integer;
    myCommand.Parameters.Add(parameters);

    parameters = new SAParameter();
    parameters.SADbType = SADbType.DateTime;
    myCommand.Parameters.Add(parameters);

    Minute recentMinutes = new Minute();

    myCommand.Parameters[0].Value = recentMinutes.Title;
    myCommand.Parameters[1].Value = recentMinutes.Location;
    myCommand.Parameters[2].Value = recentMinutes.PeriodDate;
    myCommand.Parameters[3].Value = recentMinutes.PeriodTime;
    myCommand.Parameters[4].Value = recentMinutes.Attenders;
    myCommand.Parameters[5].Value = recentMinutes.Agenda;
    myCommand.Parameters[6].Value = recentMinutes.ID;
    myCommand.Parameters[7].Value = recentMinutes.DateTime;

    try
    {
        myCommand.ExecuteNonQuery();
    }

    catch (Exception excp)
    {
        throw excp;
    }

    finally
    {
        myConnection.Close();
    }

}
public static void UpdateMinutesByMinutesID(int minuteID, string location, string title, string perioddate, string periodtime, string attenders, string agenda,DateTime datetime)
{
    string sql = "UPDATE meetingMinutes SET title=?,location=?,perioddate=?,periodtime=?,attenders=?,agenda=?,datetime=? WHERE minuteID = " + minuteID;
    DoUpdateQuery(sql);
}

}

これは私のaspx.csクラスで、ボタンをクリックするとデータベースに更新されます

protected void btnUpdate_Click(object sender, EventArgs e)
{
    int minID = Convert.ToInt32(Session["minID"]);

    string dateAndTime = tbDatepicker.Text + " " + tbTimepicker.Text;
    CultureInfo provider = CultureInfo.InvariantCulture;
    DateTime theDateTime = DateTime.ParseExact(dateAndTime, "d MMMM yyyy hh:mm tt", provider);
    Minute min = new Minute();
    min.DateTime = theDateTime;

    try
    {
        MinuteDB.UpdateMinutesByMinutesID(minID,tbLocation.Text,tbTitle.Text,tbDatepicker.Text,tbTimepicker.Text,tbAttenders.Text,tbAgenda.Text,theDateTime);
    }


    finally 
    {
        btnUpdate.Attributes.Add("onclick", "displaySuccessfulUpdate();");
        Response.Redirect("HomePage.aspx");
    }




}

なぜこれを機能させることができないのかわかりません。Column(minID) が見つからないというエラーが表示されます。メソッドに実際のパラメーターを渡していないからですか?? 誰かが私を助けることができますか?

PS: SQL Anywhere 12 を使用しています。

4

1 に答える 1

0

報告されているように、列minIDが見つからなかったのではないかと思います。( と呼ばれる列がありますが、上記のクラス定義に従ってIDいません。不一致または単に無害な DAL マッピングですか?)minID

パラメータと関係があるとは思いませんエラーは、バインドされた値(またはその欠如)ではなく、クエリの形状に関するものです。

データベースを (直接) 参照して、テーブル スキーマを検査/検証します。おそらく、いくつかのコード/sprocが更新されていません..

于 2012-07-09T03:36:00.467 に答える