私はWPIのVisual C#でSQLIteデータベースにデータを挿入します。 insertコマンドは正常に動作します。結果の行の総数を返すことで関数をチェックし、行が挿入されていることを示します。しかし、すべてのデータをチェックすると、何も表示されません。また、私は、合計数を取得しようと、それはここでは0SQLiteの挿入行が自動的に削除される
を示して私のデータベースコントローラーのコードです:
class TableController
{
SQLiteConnection m_dbConnection;
public TableController()
{
SQLiteConnection.CreateFile("MyDatabase.sqlite");
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
createDb();
}
public void createDb()
{
m_dbConnection.Open();
string sql = "CREATE TABLE data (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(50), address VARCHAR(100), mobile VARCHAR(20), date VARCHAR(20), price VARCHAR(20), warranty VARCHAR(20), month VARCHAR(20))";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
m_dbConnection.Close();
}
public Boolean add_data(Objectdata od)
{
m_dbConnection.Open();
string sql = "INSERT INTO data (name, address, mobile, date, price, warranty, month) values ('" + od.name + "', '" + od.address + "', '" + od.mobile + "', '" + od.date + "', '" + od.price + "', '" + od.warranty + "', '" + od.month + "')";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
int a = command.ExecuteNonQuery();
m_dbConnection.Close();
if (a == 0)
{
return false;
}
else if (a == 1)
{
return true;
}
else
{
return false;
}
}
public List<Objectdata> getAllData()
{
m_dbConnection.Open();
List<Objectdata> dataList = new List<Objectdata>();
Objectdata oD = new Objectdata();
string sql = "select * from data order by id";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
oD.setId(reader["id"].ToString());
oD.setName(reader["name"].ToString());
oD.setAddress(reader["address"].ToString());
oD.setMobile(reader["mobile"].ToString());
oD.setDate(reader["date"].ToString());
oD.setPrice(reader["price"].ToString());
oD.setWarranty(reader["warranty"].ToString());
oD.setMonth(reader["month"].ToString());
dataList.Add(oD);
}
m_dbConnection.Close();
return dataList;
}
public Objectdata getSingleData(String id)
{
m_dbConnection.Open();
Objectdata oD = new Objectdata();
string sql = "select * from data WHERE id = '" + id + "'";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
oD.setId(reader["id"]);
oD.setName(reader["name"]);
oD.setAddress(reader["address"]);
oD.setDate(reader["date"]);
oD.setMobile(reader["mobile"]);
oD.setPrice(reader["price"]);
oD.setWarranty(reader["warranty"]);
}
m_dbConnection.Close();
return oD;
}
public int getCount()
{
m_dbConnection.Open();
int count = 0;
string sql = "SELECT * FROM data";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
count++;
}
m_dbConnection.Close();
return count;
}
そして私は、このクラスを介してデータにアクセスしています。
TableController tablecon = new TableController();
Objectdata ob = new Objectdata();
ob.name = name.Text.ToString();
ob.address = address.Text.ToString();
ob.mobile = mobile.Text.ToString();
ob.date = date.Text.ToString();
ob.price = price.Text.ToString();
ob.warranty = warranty.Text.ToString();
ob.month = mc.returnMonth(date.Text.ToString());
Boolean res = tablecon.add_data(ob);
if (res)
{
MessageBox.Show("Added");
name.Clear();
name.Clear();
address.Clear();
mobile.Clear();
price.Clear();
warranty.Clear();
}
else
{
MessageBox.Show("Sorry an error occurred!");
}
private void button_refresh_Click(object sender, RoutedEventArgs e)
{
TableController a = new TableController();
dataList = a.getAllData();
listView.ItemsSource = dataList;
}
とクラスの1カウント(それがゼロを示している)を確認します
public void getId(String id)
{
this.id = id;
load_data(id);
}
public void load_data(String id)
{
Objectdata o = new Objectdata();
o = tableContoller.getSingleData(id);
name.AppendText(tableContoller.getCount().ToString());
address.AppendText(o.getAddress());
mobile.AppendText(o.getMobile());
date.AppendText(o.getDate());
price.AppendText(o.getPrice());
warranty.AppendText(o.getWarranty());
}
あなたのコンストラクタで接続を作成するので、かなり確かです。あなたは、接続を作成し、接続を開き、何でもしてから、すぐに接続を終了する必要があります。また、 'use'ブロックで接続とコマンドをラップして、接続を適切に処理できるようにする必要があります。 – Icemanind
だから、m_dbConnection =新しいSQLiteConnection( "データソース= MyDatabase.sqlite;バージョン= 3;";個々の機能で? –