我在下面的代码中插入了float。但它保存不正确。 例如,我插入14.5或14,5它保存了145 请帮帮我
string table_no = gbox1.Text.Trim();
string gametime = time_hour.Text.Trim() + ":" + time_minute.Text.Trim();
string localdate = DateTime.Now.ToShortDateString();
float money = float.Parse(txtbox_1.Text, CultureInfo.InvariantCulture);
try
{
connection.Open();
baza("insert into stollar (id, table_no, gametime, localdate, money) values ('" + txt1.Text + "','" + table_no + "', '" + gametime + "', '" + localdate + "', '" + money + "' )");
connection.Close();
}
答案 0 :(得分:1)
不要对sql变量使用字符串连接!请改用参数化的sql。您的列类型也应该是正确的并使用本机类型,而不是字符串表示。参数还应该使用每个参数的原生值(不是字符串表示)。
这是一个很有可能解决问题的代码修复但您需要更改架构以确保使用本机类型。这将解决您存储值的本地化字符串表示而不是本机类型的问题。以下是我对正确数据类型的猜测。
id
- 如果您希望Db自动生成此标识,则应该是标有Identity
的int。在这种情况下,请更改架构,不要在插入中传递值。table_no
- 可能是varchar
,请务必在参数中指定正确的长度。gametime
- 应该是Time
类型,将TimeSpan传递给值localdate
- 我建议使用datetime2
,但也可以使用datetime
money
- 使用decimal
并指定架构中的精度和比例。确保这些符合您在参数上设置的内容。调整后的代码
const string sql = @"INSERT INTO stollar (id, table_no, gametime, localdate, money) VALUES (@id, @table_no, @gametime, @localdate, @money)";
using(SqlConnection conn = new SqlConnection(/*your connection string from app.config or web.config*/))
using(SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int){Value = int.Parse(txt1.Text)});
cmd.Parameters.Add(new SqlParameter("@table_no", SqlDbType.VarChar, 100){Value = gbox1.Text.Trim()});
cmd.Parameters.Add(new SqlParameter("@gametime", SqlDbType.Time){Value = TimeSpan.FromMinutes(int.Parse(time_hour.Text.Trim()) * 60 + int.Parse(time_minute.Text.Trim()))});
cmd.Parameters.Add(new SqlParameter("@localdate", SqlDbType.DateTime){Value = DateTime.Now});
cmd.Parameters.Add(new SqlParameter("@money", SqlDbType.Decimal){Precision = 10, Scale = 2, Value = decimal.Parse(txtbox_1.Text, CultureInfo.InvariantCulture)});
conn.Open();
cmd.ExecuteNonQuery();
}