|
Hi,
I have a Windows database application that uses MS Access for the database. I decided to embed the database into the application and now can't connect to the mdf file. The connection string I used before I embedded it is:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + APath.Replace("bin\\Release", "") + "\\Database\\Bix.mdb;Jet OLEDB:Database Password=Password;
(APath is Program.AppPath)
Can anybody tell me how I should modify the connection string so that I can connect? I presume that it would be the "Data Source" portion. I've tried looking up the syntax but haven't found anything that works.
Thanks in advance for the assistance.
|
|
|
|
|
Member 2265148 wrote: Windows database application
Member 2265148 wrote: I decided to embed the database into the application
How did you embed that?
Member 2265148 wrote: APath.Replace("bin\\Release", "")
Why this?
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|
|
Manas Bhardwaj wrote: How did you embed that?
In the Solution Explorer, I clicked on the database, then in the Properties pane, chose "Embedded Resource" from the Build Action property.
Manas Bhardwaj wrote: Member 2265148 wrote:
APath.Replace("bin\\Release", "")
Why this?
It replaces the folder structure I use to compile the app with the folder structure that will be in place on the user's computer.
|
|
|
|
|
See, embedding a database builds it into the assembly itself. I am sure you dont wanna do this.
Next, instead of manipulating the path in code, you should use the Post Build Events to copy the database in your output directory.
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|
|
Actually, I really DO want to embed it. I don't want the user to have access to the database other than through the application.
In the current installation, it does copy the database to my output directory. I'd like to have the database part of the assembly.
|
|
|
|
|
The problem seems to be that once the Access database has been embedded, the connection object can't seem to find the database. I'm not sure how to tell it where to look.
In Visual Studio, the .mdb file is sitting in the application root folder. I set the connection string to that file and it works just fine in VS. However, when I install the .exe file onto another computer and don't copy the .mdb file over, the connection object can't find the database.
Once the .mdb file has been embedded into the application, how do I tell the connection object where to look for that file?
Thanks.
Ron
|
|
|
|
|
I found out that if I embed an Access database, I have to take it "out" of its embedded state to retrieve any data, which defeats the purpose of having it embedded.
I'm now looking at embedding SQL Server Compact Edition but am having problems finding many articles about it.
If anybody knows of an article that shows how to embed SQLCE, I'd appreciate it.
Thanks.
Ron
|
|
|
|
|
Hi,
I have this code for looping through the fields in a data table and replace some characters in the fields. I am trying to access the fields in the datatable. Its giving this error :
System.InvalidOperationException: Collection was modified; enumeration operation might not execute.
Could you help me through this, I'd really appreciate it.
foreach (DataRow dr in dtExport.Rows)
{
for (int i = 0; i < dtExport.Columns.Count; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
data = dr[i].ToString();
data = data.Replace("\"", "\"");
RowZ.Add(data.ToString());
}
}
dtExport.Rows.Add(RowZ.ToArray());
}
Let's do this !
modified on Thursday, August 14, 2008 10:27 AM
|
|
|
|
|
You cannot add or remove elements in a collection (in this case dtExport) that you are iterating over.
|
|
|
|
|
This, which comes from a diffrent part of the code works
foreach (DataRow dr in TheDataTable.Rows)
{
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
string data = dr[i].ToString();
data = data.Replace("\"","\"");
sw.Write(data);
}
if (i < iColCount - 1)
{
sw.Write(separator);
}
}
sw.Write(sw.NewLine);
}
the diffrence with the other one is that, I want to put the elements back into a datatable, for other processing.
I how do I make the change of the field values, then move the values into a data table again ?
Let's do this !
|
|
|
|
|
Try using a for loop instead of for each. That should solve your problem
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|
|
I changed it to this:
for (int j = 0; j < dtExport.Rows.Count; j++)
{
for (int i = 0; i < dtExport.Columns.Count; i++)
{
if (!Convert.IsDBNull(data = dtExport.Rows[j][i].ToString()))
{
data = dtExport.Rows[j][i].ToString();
data = data.Replace("\"", "\"");
RowZ.Add(data.ToString());
}
}
dtExport.Rows.Add(RowZ.ToArray());
}
but now I get this error System.ArgumentException:input array is longer than the number of columns in the table
Let's do this !
|
|
|
|
|
I don't see any definition for RowZ, does it have more columns than the rows in the dtExport table?
|
|
|
|
|
This is the definition, Arraylist Rowz = new Arraylist () Its an array list
Let's do this !
|
|
|
|
|
Okay, I see. On the second loop you continue to add to the array RowZ, this means that it contains the column values for two rows by the time it gets to the dtExport.Rows.Add method. Since the array has more items in it than columns, the Add method fails as it doesn't know what to do with all that extra data.
At the start of the loop over each row, you need to clear out the array.
RowZ.Clear();
|
|
|
|
|
Do not put your updating statement within the foreach scope. Try use "for(int i=0;i
|
|
|
|
|
Hi,
I have done that, and also placing the Row.Clear before the rows, but I still get the error: input array is longer than the number of columns in this table error ? Where should I have it ?
for (int j = 0; j < dpExport.Rows.Count; j++)
{
Row.Clear();
for (int i = 0; i < dpExport.Columns.Count; i++)
{
if (!Convert.IsDBNull(dpExport.Rows[j][i].ToString()))
{
data = dpExport.Rows[j][i].ToString();
data = data.Replace("\"", "\"");
Row.Add(data.ToString());
}
}
dtExport.Rows.Add(Row.ToArray());
}
Let's do this !
|
|
|
|
|
OK, now it seems that we cannot update the dpExport within the loop.
Try caching the rows to a local collection and after the loop update all the rows in the cache.
I don't know if this helps.
Sunny Chen
===============================================
System Analyst, System Architect
Consultant of China System Analyst Institution
http://www.sunnychen.org
===============================================
|
|
|
|
|
i am trying to update a mdb file.
i added a new rows to the dataset and now i am trying to update a empty mdb file to the content of the dataset.
i did something but i received an exception:
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
my code is:
string connectionString = "provider=Microsoft.JET.OLEDB.4.0; " + "data source =" + Dir;
string commandString = "Select id,name from table";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandString, connectionString);
My_DataSet = new DataSet();
OleDbCommandBuilder cb = new OleDbCommandBuilder(dataAdapter);
dataAdapter.Fill(My_DataSet, "Events");
dataAdapter.Update(My_DataSet, "Events");
|
|
|
|
|
Or try making the field bigger.
|
|
|
|
|
You can pretty much narrow this down to one of the Text columns. Compare the size of the columns with what you are trying to enter into them. If you didn't set a specific size for the column when you made it, it will default to 50 characters.
The other thing you might want to double check is the order in which you have added the parameters. It must exactly follow the order in which they appear in the SQL. otherwise the value of one might be trying to get inserted into the wrong column, which would cause this error.
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|
|
Thank you! that was perfect
|
|
|
|
|
Hi
I need to generate a 32 bit network address with the following rules: Can anyone help me with this.
1. There must be at least 1 level change in every 3 consecutive bits
i.e. ...100101110100... is acceptable
.....10010111100... is not acceptable, as it contains 4 consecutive 1's
2. Each of the 4 bytes making up the 32 bit address must be unique.
|
|
|
|
|
generate each bit sequentially running a counter to detect too many consecutive digits. If two bytes end up identical discard the second and regenerate.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots.
-- Robert Royall
|
|
|
|
|
That could be a good Friday Programming Quiz... see if the Linq experts can find a way to do it.
|
|
|
|