2016-04-08 14 views
0

VarChar sütunları için dize değişkenleri kullanarak tabloma kayıt eklemeye çalışıyorum. Bir sonraki artırılmış ID altında verdiğim değerleri eklemek istiyorum. Ancak, kodu çalıştırmayı denediğimde "böyle bir sütun yok" SQL hatasını almaya devam ediyorum. Hatanın meydana geldiği yerde bir ayrıntı yok, bu yüzden sıkışıp kaldım. Peki kayıtları bir tabloya nasıl ekleyebilirim?SQLite kullanarak Unity'de bir tabloya kayıtlar nasıl eklenir?

Burada OOP izlerseniz hayat basit olacaktır olman benim kod

using UnityEngine; 
using Mono.Data.Sqlite; 
using System.Data; 
using UnityEngine.UI; 
using System.Collections; 

public class AddQuery : MonoBehaviour { 

    public Text cipher; 
    public Text initialMessage; 
    public Text encryptedMessage; 

    private string _constr = "URI=file:previousMessages.db"; 
    private IDbConnection _dbc; 
    private IDbCommand _dbcm; 
    private IDataReader _dbr; 


public void AddSQL() { 
    string _cipher = cipher.text; 
    string _initialMessage = initialMessage.text; 
    string _encryptedMessage = encryptedMessage.text; 

    _dbc = new SqliteConnection(_constr); 
    _dbc.Open(); 

    _dbcm = _dbc.CreateCommand(); 
    _dbcm.CommandText = "CREATE TABLE IF NOT EXISTS previousMessages (ID INTEGER NOT NULL PRIMARY KEY , Cipher VARCHAR(5000) NOT NULL, InitialMessage VARCHAR(5000) NOT NULL,EncryptedMessage TEXT NOT NULL)"; 
    _dbr = _dbcm.ExecuteReader(); 
    _dbr.Close(); 

    _dbcm.CommandText = "INSERT INTO previousMessages (Cipher, InitialMessage, EncryptedMessage) VALUES ("+_cipher+", "+_initialMessage+", "+_encryptedMessage+")"; 
    _dbr = _dbcm.ExecuteReader(); 
    _dbr.Close(); 

    _dbcm.CommandText = "SELECT FROM previousMessages (Cipher, InitialMessage, EncryptedMessage) VALUES (" + _cipher + ", " + _initialMessage + ", " + _encryptedMessage + ")"; 
    _dbr = _dbcm.ExecuteReader(); 

    while (_dbr.Read()) 
    { 
     Debug.Log("Cipher: " + _dbr["Cipher"] + "\t Initial: " + _dbr["InitialMessage"]); 
    } 

} 

}

cevap

2

bu. Yani bir yöntemin sadece bir şey yapmasına izin vermek istersiniz; ya da her biri sadece 1 şey yapan diğer yöntemlere çağrı yapmaktan çok şey yapmak zorundaysa. Bu varlık dedi senin AddSQL() sonları aşağı:

public void AddSQL() { 
    string _cipher = cipher.text; 
    string _initialMessage = initialMessage.text; 
    string _encryptedMessage = encryptedMessage.text; 

    OpenConnection(); 
    ExecuteCreateCommand(); 
    InsertCommand(_cipher, _initialMessage, _encryptedMessage); 
    ReadStuff(_cipher, _initialMessage, _encryptedMessage); 
    DebugRead(); 

} 

void OpenConnection(){ 
    _dbc = new SqliteConnection(_constr); 
    _dbc.Open(); 
} 

void ExecuteCreateCommand(){ 
    _dbcm = _dbc.CreateCommand(); 
    _dbcm.CommandText = "CREATE TABLE IF NOT EXISTS previousMessages (ID INTEGER NOT NULL PRIMARY KEY , Cipher VARCHAR(5000) NOT NULL, InitialMessage VARCHAR(5000) NOT NULL,EncryptedMessage TEXT NOT NULL)"; 
    _dbr = _dbcm.ExecuteReader(); 
    _dbr.Close(); 
} 

void InsertCommand(string _cipher, string _initialMessage, string _encryptedMessage){ 
    _dbcm.CommandText = "INSERT INTO previousMessages (Cipher, InitialMessage, EncryptedMessage) VALUES ("+_cipher+", "+_initialMessage+", "+_encryptedMessage+")"; 
    _dbr = _dbcm.ExecuteReader(); 
    _dbr.Close(); 
} 

void ReadStuff(string _cipher, string _initialMessage, string _encryptedMessage){ 
    _dbcm.CommandText = "SELECT FROM previousMessages (Cipher, InitialMessage, EncryptedMessage) VALUES (" + _cipher + ", " + _initialMessage + ", " + _encryptedMessage + ")"; 
    _dbr = _dbcm.ExecuteReader(); 
} 

void DebugRead(){ 
    while (_dbr.Read()) 
    { 
     Debug.Log("Cipher: " + _dbr["Cipher"] + "\t Initial: " + _dbr["InitialMessage"]); 
    } 
} 

Şimdi AddSQL() comment tüm yöntem çağrıları ve bir istisna atar hangi sorgu görmek için tek yorumsuz bir yer.

+0

Yardımlarınız için teşekkürler; Kodlarımla bazen biraz dağınık olabilirim. Görünüşe göre "Ceaser" dizesi, "böyle bir sütun bulunmuyor" şeklinde tabloya gidemediğim hatayı almaya devam ediyorum. Bunun neden olduğunu biliyor musun? –

+0

Buradaki nokta, hangi hattın size bir hata verdiğini bildirmek oldu. Ama ben, 'ExecuteCreateCommand() 've' InsertCommand() '' '_dbcm.ExecuteNonQuery()' '' _dbcm.ExecuteReader() 'yerine kullanmanız gerektiğini varsayalım. Yine de emin değilim. [ExecuteNonQuery docs] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery (v = vs.110) .aspx) bunu veritabanı nesneleri oluştururken kullanabilirsiniz. tablolar gibi * –

İlgili konular