Ich arbeite mit SQLite zum ersten Mal und jetzt tun, um zu beheben, wenn ich etwas zu dem DB hinzufügen mag, wirft es eine Fehlermeldung,:Was kann ich meine SQLite Verbindungszeichenfolge
"Invalid Connectionstring-Format kann nicht analysieren: String-Wert zu spalten nicht null sein kann“
Hier ist mein Code für diese so weit ist (ich aus einem Tutorial arbeite):
String dbConnection;
/// <summary>
/// Default Constructor for SQLiteDatabase Class.
/// </summary>
public void SQLiteDatabase()
{
dbConnection = "Data Source = StockDB.s3db; Version = 3;";
}
public int ExecuteNonQuery(string sql)
{
SQLiteConnection cnn = new SQLiteConnection(dbConnection);
cnn.Open(); //error thrown here
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = sql;
int rowsUpdated = mycommand.ExecuteNonQuery();
cnn.Close();
return rowsUpdated;
}
ich weiß nicht, ob Sie den Code für die sQL-Abfrage benötigen aswell aber:
DBHelper db = new DBHelper();
UserInfo UI = new UserInfo();
UI.UserName = "henry";
UI.Code = 123;
UI.Role = "LEADER";
string sql = "INSERT INTO User (Username, Code, Role)" +
"VALUES (" + UI.UserName + "" + UI.Code.ToString() + "" + UI.Role + ")";
db.ExecuteNonQuery(sql);
Ich weiß nicht, wie das zu beheben ist. Ich kann von der Datenbank kein Problem lesen.
Zusätzliche Informationen:
namespace Stock_A_Lot
{
public class DBHelper
{
String dbConnection;
/// <summary>
/// Default Constructor for SQLiteDatabase Class.
/// </summary>
public void SQLiteDatabase()
{
dbConnection = "Data Source = StockDB.s3db; Version = 3;";
}
public DataTable GetDataTable(string sql)
{
DataTable dt = new DataTable();
try
{
SQLiteConnection cnn = new SQLiteConnection(dbConnection);
cnn.Open();
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = sql;
SQLiteDataReader reader = mycommand.ExecuteReader();
dt.Load(reader);
reader.Close();
cnn.Close();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
return dt;
}
/// <summary>
/// Allows the programmer to interact with the database for purposes other than a query.
/// </summary>
/// <param name="sql">The SQL to be run.</param>
/// <returns>An Integer containing the number of rows updated.</returns>
public int ExecuteNonQuery(string sql)
{
SQLiteConnection cnn = new SQLiteConnection(dbConnection);
cnn.Open();
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = sql;
int rowsUpdated = mycommand.ExecuteNonQuery();
cnn.Close();
return rowsUpdated;
}
/// <summary>
/// Allows the programmer to retrieve single items from the DB.
/// </summary>
/// <param name="sql">The query to run.</param>
/// <returns>A string.</returns>
public string ExecuteScalar(string sql)
{
SQLiteConnection cnn = new SQLiteConnection(dbConnection);
cnn.Open();
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = sql;
object value = mycommand.ExecuteScalar();
cnn.Close();
if (value != null)
{
return value.ToString();
}
return "";
}
/// <summary>
/// Allows the programmer to easily insert into the DB
/// </summary>
/// <param name="tableName">The table into which we insert the data.</param>
/// <param name="data">A dictionary containing the column names and data for the insert.</param>
/// <returns>A boolean true or false to signify success or failure.</returns>
public bool Insert(String tableName, Dictionary<String, String> data)
{
String columns = "";
String values = "";
Boolean returnCode = true;
foreach (KeyValuePair<String, String> val in data)
{
columns += String.Format(" {0},", val.Key.ToString());
values += String.Format(" '{0}',", val.Value);
}
columns = columns.Substring(0, columns.Length - 1);
values = values.Substring(0, values.Length - 1);
try
{
this.ExecuteNonQuery(String.Format("insert into {0}({1}) values({2});", tableName, columns, values));
}
catch (Exception fail)
{
MessageBox.Show(fail.Message);
returnCode = false;
}
return returnCode;
}
}
}
Wahrscheinlich ist die Klasse, die ein DBHelper im letzten Beispiel – Steve
Ohne das Komma Namen zwischen den Werten, die sie für den Augenblick sicher ist. :-) – Steve
@Steve: Du hast wahrscheinlich Recht (erster Kommentar), obwohl dieser Methodenkopfkommentar auch geändert werden muss (oder entfernt werden muss) :) (zweiter Kommentar) Es sei denn, der erste Wert ist der kompromittierte und der Rest ist kommentiert. Welches war das erste, an das ich dachte, Bobby Tische und alle :) – David