получить параметр из базы данных с помощью запроса c # - PullRequest
0 голосов
/ 25 июня 2018
string s = "select idviagem from tbviagem where dia like '" + idatxt.Text + "'";
cmd = new SqlCommand(s, con);

Мне нужно idviagem из таблицы tbviagem, чтобы положить idviagem из tbpassageiro (это FK на tbpassageiro), но мне нужно получить idviagem из idatxt.Text этоформат DateTime, но выполнение вставки (посмотрите вниз) дает мне ошибку:

Преобразование не удалось при преобразовании значения nvarchar 'выберите idviagem из tbviagem, где dia, как '06 / 12/2018 00:00: 00 '' к типу данных int. '

, но, конечно, idviagem является целым числом.

string q = "insert into tbpassageiro (nome,cc,fotocc,idviagem) values(@n,@cc,@p,@iv)";

cmd = new SqlCommand(q, con);

con.Open();
cmd.Parameters.AddWithValue("@p", data);
cmd.Parameters.AddWithValue("@n", nometxt.Text);
cmd.Parameters.AddWithValue("@cc", cctxt.Text);
cmd.Parameters.AddWithValue("@iv", s);
cmd.ExecuteNonQuery();

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы никогда не должны выполнять такие SQL-операторы, а использовать параметры.Вы используете параметры для своего второго утверждения, но не делаете это для первого.

Сказав это, вы пытаетесь использовать строку запроса s в качестве значения параметра для @iv.Вместо этого вы должны сначала выполнить ExecuteScalar и использовать результат этого во второй.

Однако вы можете получить значение idviagem и выполнить вставку в одном единственном выражении, например:

 string q = @"insert into tbpassageiro 
(nome,cc,fotocc,idviagem) 
select @n,@cc,@p,idViagem from tbviagem where dia like @dia";

SqlCommand cmd = new SqlCommand(q, con);

cmd.Parameters.AddWithValue("@p", data);
cmd.Parameters.AddWithValue("@n", nometxt.Text);
cmd.Parameters.AddWithValue("@cc", cctxt.Text);

cmd.Parameters.Add("@dia", SqlDbType.VarChar).Value = idatxt.Text;

con.Open();
cmd.ExecuteNonQuery();
con.Close();

Примечание. Я не предлагаю использовать AddWithValue, вместо этого предпочитайте Add.

РЕДАКТИРОВАТЬ: Для выборки с полем Dia Datetime:

DateTime dt;
cmd.Parameters.Add("@dia", SqlDbType.DateTime);
if (DateTime.TryParse(idatxt.Text, out dt))
{
    cmd.Parameters["@dia"].Value = dt;
}
else
{
    cmd.Parameters["@dia"].Value = DBNull.Value;
}

Если idatxt для получения значения date \ datetime, было бы намного проще использовать DateTimePicker для получения действительного значения DateTime.

0 голосов
/ 25 июня 2018

Похоже, вы передаете строку запроса s в качестве значения параметра для @iv вместо результата этого запроса.

Я предлагаю выполнить команду cmd и передать значение результатадо @iv:

string s = "select idviagem from tbviagem where dia like '" + idatxt.Text + "'";
cmd = new SqlCommand(s, con);

con.Open();
Int32 resultValue = (Int32) cmd.ExecuteScalar();

string q = "insert into tbpassageiro (nome,cc,fotocc,idviagem) values(@n,@cc,@p,@iv)";

cmd = new SqlCommand(q, con);
cmd.Parameters.AddWithValue("@p", data);
cmd.Parameters.AddWithValue("@n", nometxt.Text);
cmd.Parameters.AddWithValue("@cc", cctxt.Text);
cmd.Parameters.AddWithValue("@iv", resultValue);
cmd.ExecuteNonQuery();
...