i want to create a material database with c# and MS Access SQL:
private void btnTest_Click(object sender, EventArgs e)
{
string provStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
string openStr = "Data source=" + AppDomain.CurrentDomain.BaseDirectory + "MaterialDB.mdb";
// Create structure, if not exist
con = new OleDbConnection();
con.ConnectionString = provStr + openStr;
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
OleDbCommand cmdTest = con.CreateCommand();
cmdTest.CommandText = "CREATE TABLE NomCom (" + Environment.NewLine +
" ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY," + Environment.NewLine +
" ValueTest VARCHAR(50) NOT NULL UNIQUE" + Environment.NewLine +
");" + Environment.NewLine;
cmdTest.ExecuteNonQuery();
cmdTest.CommandText = "INSERT INTO NomCom (ValueTest)" + Environment.NewLine + //ID ValueTest
"SELECT @valuenomcom;";
cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
cmdTest.ExecuteNonQuery();
}
This is working fine.
But when i try to insert only if the item does not exist with
private void ...
{
cmdTest.CommandText = "INSERT INTO NomCom (ValueTest)" + Environment.NewLine + //ID ValueTest
"SELECT @valuenomcom WHERE NOT EXISTS(SELECT * FROM NomCom WHERE Value = @valuenomcom);" + Environment.NewLine;
cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
cmdTest.ExecuteNonQuery();
}
This does not working. I am getting this error:
Getting a syntax error (missing operator) in query expression '@valuenomcom WHERE NOT EXISTS(SELECT * FROM NomCom WHERE Value = @valuenomcom)'.
But i have no idea what the problem is.
Any ideas?
I don't have Access so cant test syntax. But following this answer https://stackoverflow.com/a/16530237/3470178
You can do something like this:
cmdTest.CommandText =
"INSERT INTO NomCom (ValueTest)" + Environment.NewLine + //ID ValueTest
"SELECT *
FROM ( SELECT @valuenomcom as newValue ) as Q
WHERE Q.newValue NOT IN (SELECT Value FROM NomCom WHERE Value = @valuenomcom);" +
Environment.NewLine;
cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
cmdTest.ExecuteNonQuery();
Of course test it first on Access.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.