I'm trying to create a command that will be executed in the database, but i always get the same error when i try to execute it.
first of all, lets start with the code, maybe there is something wrong in there that i cant see:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
public partial class ASPX_register : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
string username = Request.Form["username"].Replace("'","''");
string password = Request.Form["password"].Replace("'", "''");
string fname = Request.Form["fname"].Replace("'", "''");
string lname = Request.Form["lname"].Replace("'", "''");
string email = Request.Form["email"].Replace("'", "''");
OleDbConnection dbCon = new OleDbConnection();
OleDbCommand dbCmd = new OleDbCommand();
String Path = Server.MapPath(@"../App_Data/ShakedDB.mdb;");
dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Path;
dbCmd.Connection = dbCon;
OleDbParameter pUser = new OleDbParameter();
OleDbParameter pPass = new OleDbParameter();
OleDbParameter pEmail = new OleDbParameter();
OleDbParameter rDate = new OleDbParameter();
OleDbParameter pfname = new OleDbParameter();
OleDbParameter plname = new OleDbParameter();
pUser.ParameterName = "@Username";
pUser.Value = username;
pPass.ParameterName = "@Password";
pPass.Value = password;
pfname.ParameterName = "@pfname";
pfname.Value = fname;
plname.ParameterName = "@plname";
plname.Value = lname;
pEmail.ParameterName = "@Email";
pEmail.Value = email;
rDate.ParameterName = "@RDate";
rDate.Value = DateTime.Now.ToString();
dbCmd.Parameters.Add(pUser);
dbCmd.Parameters.Add(pPass);
dbCmd.Parameters.Add(pEmail);
dbCmd.Parameters.Add(rDate);
dbCmd.Parameters.Add(pfname);
dbCmd.Parameters.Add(plname);
OleDbDataAdapter dataA = new OleDbDataAdapter(dbCmd);
dbCmd.CommandText = String.Format("SELECT * FROM Members WHERE username = @Username");
DataTable dataT = new DataTable();
dataA.Fill(dataT);
if (dataT.Rows.Count == 0)
{
dbCmd.CommandText = String.Format("INSERT INTO Members (username,[password],[firstName],[lastName],email,registerDate) VALUES (@Username,@Password,@pfname,@plname,@Email,@RDate);");
dbCon.Open();
dbCmd.ExecuteNonQuery();
dbCon.Close();
Response.Write(" " + fname + " " + lname);
Response.Write("נרשמת לאתר בהצלחה" + "<br />");
Response.Write("שם המשתמש שלך הוא:" + username + "<br />");
Response.Write("הסיסמא שלך היא:" + password + "<br />");
Response.Write("האימייל שאיתו נרשמת הוא:" + email + "<br />");
Response.Write("<a href='../ASPX/main.aspx' target='mainFrame'>בחזרה לעמוד הראשי לחץ כאן</a>");
}
else
{
Response.Write("שם המשתמש הזה כבר תפוס. נסה שם אחר." + "<br />");
Response.Write("<a href='main.aspx' target='mainFrame'>בחזרה לעמוד הראשי לחץ כאן</a>");
}
}
catch (Exception ex)
{
Response.Write(ex);
}
}
}
ignore the Hebrew part please, its just tells the user that he registered. Here is the error that i get: http://prntscr.com/6gh189 The Hebrew part says "A mismatch of the expression data type criteria". I want to say that the code works perfectly without the 'pfname' and 'plname' parameters, for some reason when i add them this error occurs. I also tried to write this 'insert' command and it worked, so it must be something with the parameters, but i cant find it:
INSERT INTO Members (username,[password],[firstName],[lastName],email,registerDate) VALUES (@Username,@Password,'asdfasdfasdf','asdfasdf',@Email,@RDate);
the code above works and i get no error if i use it.