1

プログラムの起動時に、SQL Server CE テーブルが存在しない場合は作成し、それにレコードを追加します。

if (dbconn.isValidTable("hhs_settings") == -1) // <-- (IOW, it's *not* a valid table)
{
    DBUtils.CreateSettingsTable();
    AppSettings.WriteSettingsVal("beltprinter", "None");
}

public static void CreateSettingsTable()
{
    try
    {
        string sqlddl =
            "create table hhs_settings (setting_id int identity (1,1) Primary key,  setting_name varchar(40) not null, setting_value(63) varchar not null)";
        dbconn.DBCommand(sqlddl, false);        
    }
    catch (SqlCeException sqlcex)
    {
        MessageBox.Show("sqlcex - CreateSettingsTable " + sqlcex.Message);
    }
    catch (Exception ex)
    {
        MessageBox.Show("CreateSettingsTable " + ex.Message);
    }
}

...しかし、テーブルから読み取るフォームを開くと:

lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");

... 「テーブル0が見つかりません」で失敗します

public static string ReadSettingsVal(string settingName)
{
    string retVal = string.Empty;
    string sqldml = string.Format("select setting_value from hhs_settings where setting_name = {0}", " + settingName + ");
    // There should only be one value returned, but using the existing getDataSet() method for now...
    DataSet dsSettingVal = frmCentral.dbconn.getDataSet(sqldml);
    foreach (DataRow row in dsSettingVal.Tables[0].Rows)
    {
        if (retVal == string.Empty)
        {
            retVal = row["setting_value"].ToString();
        }
    }
    return retVal;
}

テーブル (hhs_settings) が作成されないように、ここで手順が抜けていますか? または...???

アップデート

間抜けにフォーマットされたすべての文字列を次のように変更した後でも、同じエラーメッセージが表示されます。

string sqldml = string.Format("insert into hhs_settings (setting_name, setting_value) values('{0}', '{1}')", settingName, settingVal);
string sqlqry = string.Format("select setting_value from hhs_settings where setting_name = '{0}'", settingName);

そして、おそらく createtable sql は既に良好であったにもかかわらず、「h​​hs_settings を作成しようとしています」というメッセージがまだ表示されます。

string sqlddl =
    "create table hhs_settings (setting_id int identity (1,1) Primary key,  setting_name varchar(40) not null, setting_value(63) varchar not null)";

...そして、テーブルが作成されているはずです (これにより、 isValidTable() メソッドは -1 (テーブルが見つからない場合に返す値) 以外の値を返すようになっているはずです)。

更新 2

ddlを次のように変更したときに役立ちました(現在は機能しています):

string sqlddl = "テーブル hhs_settings を作成します (setting_id int identity (1,1) 主キー、setting_name nvarchar(40) not null、setting_value nvarchar(63) not null)";

4

2 に答える 2

1

ストアド プロシージャを使用している場合は、その中で渡されるクエリの名前を確認してください。フロントエンドとバックエンドと正確に一致する必要があります。

于 2016-03-09T12:58:13.220 に答える